让我更详细地解释一下我的问题。
首先,我有一个班级' UserInfo'它连接到django.contrib.auth.models的User类,如下所示
models.py
class UserInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=15,blank=True,unique=True)
position = models.CharField(max_length=15,blank=True,unique=True)
class Meta:
default_permissions = ()
def __str__(self):
return self.position
然后我想使用ModelForm,因为我可以编写更少的代码。我创建CreateNewUser类的原因是我想让用户只能看到[用户名,电子邮件,组,user_permissions]并控制它们。 (以防止他们选择超级用户或员工或非活动选项)
forms.py
class CreateNewUserInfo(forms.ModelForm):
class Meta:
model = UserInfo
fields = '__all__'
class CreateNewUser(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'email', 'groups', 'user_permissions']
问题发生在这里。我想使用FormView来使用带类类型视图的通用视图,这样我就可以编写更少的代码(简洁的代码)。有一个名为' form_class'而且我无法用两个不同的课程。我想把不同的两个类放到一个具有通用视图的表单中。
views.py
class TestView(FormView):
form_class = CustomForm
template_name = 'manager/alltoall.html'
def form_valid(self, form):
最后,我在forms.py中创建了新类,并编写了我需要的每个字段,如下所示。
forms.py
class CustomForm(forms.Form):
username = forms.CharField(initial='testname',max_length=150)
email = forms.EmailField()
phone_number = forms.CharField(max_length=15)
position = forms.CharField(max_length=15)
views.py
class TestView(FormView):
form_class = CustomForm
template_name = 'manager/alltoall.html'
def form_valid(self, form):
username = form.cleaned_data['username']
email = form.cleaned_data['email']
phone_number = form.cleaned_data['phone_number']
position = form.cleaned_data['position']
with transaction.atomic():
user = User.objects.create(username=username,email=email)
userinfo = UserInfo.objects.create(user=user,phone=phone_number,position=position)
userinfo.save()
user.save()
return super(TestView, self).form_valid(form)
无论如何使用ModelForm和FormView同时在表单中显示两个不同的类?另外,我使用了上面的事务,因为我想用两个不同的类将数据保存在数据库中。它是正确的方法还是有其他方法可以更方便(或有效)使用django中的内置函数来做到这一点?
感谢您抽出宝贵时间阅读所有内容。我想知道它是否太长了,但我想提供我想要确切知道的东西。谢谢!