Ich habe ein Modell, das ungefähr so aussieht:Laden und Daten von m2m Beziehungen in Textarea Widgets mit Modelform Speicher
class Business(models.Model):
name = models.CharField('business name', max_length=100)
# ... some other fields
emails = models.ManyToManyField(Email, null=True)
phone_numbers = models.ManyToManyField(PhoneNumber, null=True)
urls = models.ManyToManyField(URL, null=True)
und eine entsprechende Modelform:
class BusinessContactForm(forms.ModelForm):
emails = forms.CharField(widget=forms.Textarea(attrs={'rows':4,'cols':32}))
phone_numbers = forms.CharField(widget=forms.Textarea(attrs={'rows':4,'cols':32}))
urls = forms.CharField(widget=forms.Textarea(attrs={'rows':4,'cols':32}))
class Meta:
model = Business
fields = ['emails', 'phone_numbers', 'urls',]
Meine Frage: Was ist die Die beste Methode, um die vorhandenen E-Mails, Telefonnummern und URLs in die Textarea-Widgets zu laden, wenn das Formular angezeigt wird (eines pro Zeile in den entsprechenden Widgets)?
Dann, nachdem das Formular geändert und eingereicht wurde, was ist der beste Weg, um sicherzustellen, dass neue E-Mails, Zahlen oder URLs (m2m Beziehungen) hinzufügen und entfernen Sie alle, die nicht mehr in der Liste sind sicher, keine Duplikate hinzuzufügen)?
Ich hatte über die Verwendung von Formsets nachgedacht, aber es schien, als wäre dies eine einfachere Benutzeroberfläche und sauberer Code insgesamt (vorausgesetzt, ich könnte es so ausführen, wie ich es mir vorgestellt habe - was selten der Fall ist). Das gesagt, ich hatte Formsets versucht, aber nicht so, dass ich für jedes der drei Elemente in der Ansicht (E-Mail, Telefon, URL) erstellen musste, und dann validieren und Daten von jedem auch behandeln. Sie erwähnen ein "Inline" -Formet für das BusinessContact-Formular - ist das eine spezielle Art von Formularsatz? Wenn ja, könntest du ein wenig weiterarbeiten? Vielen Dank! –
Ich sollte auch beachten: Ich habe nicht ein Formularsatz mit allen drei Elementen erstellt, weil der Benutzer in der Lage sein soll, unterschiedliche Nummern von jedem (vielleicht ein oder zwei URLs, ein paar Telefonnummern und mehrere E-Mail-Adressen) anzugeben. –
Also recherchierte ich Inline-Formsets, nachdem Sie sie erwähnt hatten (ich hatte die Dokumentation mehrere Male durchsucht und diesen Teil vermisst) und sie scheinen sich um all die Komplexitäten zu kümmern, die ich brauche ... Ich muss mit der Erstellung eines Formsets leben für jedes verwandte Feld und verschiebe sie in Viele-zu-Eins-Beziehungen. Danke für die Hilfe. –