Django 2型号1表格
所以,我仍然是Django的一个不速之客,我想知道如何做到以下几点: 假设我有如下代码:Django 2型号1表格,django,django-models,django-forms,Django,Django Models,Django Forms,所以,我仍然是Django的一个不速之客,我想知道如何做到以下几点: 假设我有如下代码: class UserProfile(models.Model): #Some fields class UserProfileOther(models.Model): #Some other fields that I want in another table for organization user_profile = models.OneToOneField(UserProf
class UserProfile(models.Model):
#Some fields
class UserProfileOther(models.Model):
#Some other fields that I want in another table for organization
user_profile = models.OneToOneField(UserProfile)
现在如何创建包含上述两个模型的表单?我的方法是基于第一个模型创建表单,然后基于继承第一个表单的第二个模型创建表单。意思是: 类UserProfileForm(ModelForm): 类UserProfileOtherForm(UserProfileForm):
并将
UserProfileOtherForm
传递给表单模板。这对我有用。不确定是否有更简单的方法。您可以创建两个单独的ModelForm类。但在您看来,您必须为它们的实例添加前缀
def viewname(request):
if request.method == 'POST':
form1 = forms.YourForm(request.POST, prefix="form1")
form2 = forms.YourOtherForm(request.POST, prefix="form2")
if form1.is_valid() and form2.is_valid():
# process valid forms
else:
form1 = forms.YourForm(prefix="form1")
form2 = forms.YourOtherForm(prefix="form2")
....
使用前缀可以确保具有相似名称的字段不会混淆。这种问题就是专门为其设计的。根据我的经验,您可以创建第三个FormClass表单(而不是模型!),然后使用其保存正确地写回数据。在显示表单时,它为您提供了更大的灵活性。您希望两个模型都显示在同一表单中有什么原因吗?您是否只是尝试生成一个HTML表单(因此用户只需提交一次)?这样,如果form1无效,它将不会继续验证form2,也不会显示其错误。在这种情况下,您可以执行form1\u valid=form1.is\u valid()+form2\u valid=form2.is\u valid()然后,如果form1\u valid和form2\u valid:…有人知道如何使用基于类的视图进行此操作吗?@umami,目前没有针对此场景创建的基于类的通用视图。但我听说它会在某个时刻到来。在那之前,通过实现自己的post()等方法来解决这个问题并不难。