带有来自两个不同模型的字段的 Django 表单

标签 django forms django-models django-forms django-crispy-forms

我需要显示一个表单,其中包含来自 2 个不同模型的多个字段。
表单将只包含模型中的部分字段,并且布局将使用清晰的表单进行。

我的模型:

class Company(BaseModel):
    title = models.CharField(_('Company'), max_length=128)
    domain = models.CharField(_('Domain'), max_length=128)
class Account(BaseModel):
    company = models.ForeignKey(Company)
    user = models.OneToOneField(User)
    role = models.CharField(_('Role'), choices=ROLES, default='member', max_length=32)

我想以表格形式显示的字段:
公司名称、用户名、用户姓氏、用户电子邮件

甚至有可能吗?我怎样才能做到这一点?

最佳答案

此页面上的其他答案涉及放弃模型表单的好处,并且可能需要复制您免费获得的某些功能。

真正的关键是要记住一种 html 表单!= 一种 django 表单。您可以将多个表单包装在一个 html 表单标签中。

因此,您只需创建两个模型表单并在您的模板中呈现它们。除非某些字段名称发生冲突,否则 Django 将确定哪些 POST 参数属于每个参数 - 在这种情况下,在实例化每个表单时给每个表单一个唯一的前缀。

形式:

class CompanyForm(forms.ModelForm):
    class Meta:
        fields = [...]
        model = Company

class AccountForm(forms.ModelForm):
    class Meta:
        fields = [...]
        model = Account

看法:
if request.method == 'POST':

    company_form = CompanyForm(request.POST)
    account_form = AccountForm(request.POST)

    if company_form.is_valid() and account_form.is_valid():

        company_form.save()
        account_form.save()
        return HttpResponseRedirect('/success')        

    else:
        context = {
            'company_form': company_form,
            'account_form': account_form,
        }

else:
    context = {
        'company_form': CompanyForm(),
        'account_form': AccountForm(),
    }

return TemplateResponse(request, 'your_template.html', context)

模板:
<form action="." method="POST">
    {% csrf_token %}
    {{ company_form.as_p }}
    {{ account_form.as_p }}
    <button type="submit">
</form>

关于带有来自两个不同模型的字段的 Django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27968417/

相关文章:

django - Graphene Django 文件字段获取绝对路径

django - 直接调用绑定(bind)任务时的 Mocking Celery `self.request` 属性

javascript - jquery 禁用表单和链接中的提交/单击按钮

asp.net - 建筑下拉菜单选择形式 : code block not supported in this context

python - 在运行时更改 django 模型的表名称

python - 如何在没有管理验证的情况下制作 django 表单字段

django - SESSION_COOKIE_HTTPONLY = True 在 Django : 中不起作用

php - 通过 ajax onchange 事件传递选定的值

python - ImportError 和 Django 让我抓狂

django - 大家好,我正在编写你的第一个 Django 应用程序,第 2 部分教程,我尝试了 _str_() 函数,但它没有给我相同的结果