Ho un set di oggetti documento e oggetti etichetta e voglio che questi due oggetti siano collegati. È una tipica relazione molti-a-molti. Ho il seguente codice:Quando e in che modo viene creata una relazione molti-a-molti durante il salvataggio di un modello?
Models.py:
class Document(models.Model):
title = models.CharField(max_length=50, unique=True)
title_slug = models.SlugField(max_length=50, unique=True, editable=False)
labels = models.ManyToManyField('Label')
def save(self, *args, **kwargs):
self.title_slug = slugify(self.title)
super(Document, self).save(*args, **kwargs)
class Label(models.Model):
name = models.CharField(max_length=40, unique=True)
slug = models.SlugField(max_length=40, unique=True, editable=False)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Document, self).save(*args, **kwargs)
Views.py:
class DocumentForm(ModelForm):
class Meta:
model = Document
fields = ["title","labels"]
def upload_document(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
new_document = form.save()
return HttpResponseRedirect("/thanks/")
else:
form = DocumentForm()
return render_to_response('upload_page.html', {'form':form}, context_instance=RequestContext(request))
Quando ho caricare un documento, esso viene aggiunto al database, ma nessuna etichetta sono in corso creato o associato al documento. Devo aggiungere qualcosa alla funzione save() del documento per farlo accadere? O da qualche parte nel file Views.py? Mi piacerebbe pensare che sarebbe andata qualcosa di simile:
- controllare per vedere se l'etichetta che viene aggiunto esiste già
- Se non lo fa, quindi creare una nuova etichetta
- Grab sia la corrente document_id e il nuovo/esistente label_id
- Aggiungere un record alla tabella document_labels (creata automaticamente per la relazione molti-a-molti)
mi sento come se questa è la funzionalità piuttosto standard che ho assunto sarebbe stato costruito per am rapporto any-to-many in django, ma non sembra funzionare per me finora. Sto cercando di evitare di reinventare la ruota qui. Un po 'nuovo per il Django.
Grazie in anticipo!
Si sta utilizzando un modulo? Stai aggiungendo 'Document's con altri mezzi? Di quale metodo save() stai parlando? Quello in 'Documento',' Etichetta' o una forma? Si prega di fornire alcuni esempi di vista/modulo/altro codice che salva l'oggetto. – andreaspelme
Immagino di non essere veramente sicuro di quale metodo di salvataggio debba entrare. Da qui la mia domanda =] i documenti vengono tutti aggiunti tramite un modulo sul sito. Ho aggiornato la domanda per includere quel codice da views.py –