Ich habe ein Modell, das zusätzliche Informationen hat, die ich an den Benutzer anfügen muss, wenn sie Teil einer bestimmten Gruppe sind. Ich habe eine einfache CreateView erstellt, um diese Arbeit zu testen. Leider speichert es nicht alle Informationen im zweiten Modell. Dies ist das erste Mal, dass ich betterforms nutze, und ich folgte den Dokumenten. Es sieht jedoch so aus, als würde ich etwas vermissen. Hier ist meine aktuellen Code:Django MultiModelForms nicht speichern im zweiten Modell
Forms.py:
# Operator Creation Form
class OperatorProfileForm(forms.ModelForm):
class Meta:
model = OperatorProfile
fields = ('cdl', 'endorsement', 'cdl_expiration')
class UserCreationMultiForm(MultiModelForm):
form_classes = {
'user': UserCreationForm,
'profile': OperatorProfileForm,
}
# Save the user first, because the profile needs a user before it
# can be saved.
def save(self, commit=True):
objects = super(UserCreationMultiForm, self).save(commit=False)
if commit:
user = objects['user']
user.save()
profile = objects['profile']
profile.user = user
profile.save()
return objects
Views.py:
class IndexView(TemplateView):
template_name = 'pages/index.html'
class OperatorCreateView(CreateView):
model = OperatorProfile
template_name = 'pages/operatorprofile_form.html'
form_class = UserCreationMultiForm
success_url = reverse_lazy('index')
Models.py:
class CDL(models.Model):
cdl_type = models.CharField(max_length=10)
description = models.TextField(max_length=255, blank=True)
def __str__(self):
return self.cdl_type
class Endorsement(models.Model):
endorsement_type = models.CharField(max_length=10)
description = models.TextField(max_length=255, blank=True)
def __str__(self):
return self.endorsement_type
class OperatorProfile(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
cdl = models.ManyToManyField('CDL')
endorsement = models.ManyToManyField('Endorsement')
cdl_expiration = models.DateField(default=timezone.now)
def __str__(self):
return str(self.user)
Momentan werden die ForeignKeys nicht im OperatorProfile-Modell gespeichert, aber die anderen Einstellungen werden problemlos gespeichert. Jede Eingabe würde sehr geschätzt werden.