我有一个模型,如果他们是特定组的一部分,我需要附加到用户的附加信息。我已经构建了一个简单的 CreateView 来测试这个工作。不幸的是,它没有将所有信息保存在第二个模型中。这是我第一次使用 Betterforms,我遵循了文档。但是,看起来我错过了一些东西。这是我当前的代码:
表格.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
视图.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')
模型.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)
目前它没有在 OperatorProfile 模型中保存 ForeignKeys,但其他设置保存得很好。任何投入将不胜感激。