Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 2型号1表格_Django_Django Models_Django Forms - Fatal编程技术网

Django 2型号1表格

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

所以,我仍然是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(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()等方法来解决这个问题并不难。