如何从两个Django表单创建字段集合?

2024-04-26 23:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在django1.8.3中创建一个自定义用户注册表单。我想要实现的是一个表单,它由基于两个独立模型的两个独立表单组成。第一个模型是默认的DjangoUser模型,基于它的表单包含usernameemailfirst_namelast_namepassword1和{}字段。第二个模型是UserDetails,目前它只包含三个字段user(它应该存储一个外键-用户id)、middle_name和{}。我想创建一个模板,按以下顺序显示这两个表单的字段:

  • username
  • email
  • phone_number
  • first_name
  • middle_name
  • last_name
  • password1
  • password2。在

问题是:有没有什么方法可以创建这些字段的列表(或任何其他集合),然后我可以迭代这些字段,使它们以特定的顺序显示?我尝试创建窗体的实例:

registration_form = RegistrationForm()
user_details_form = UserDetailsForm()

以及按我的自定义顺序列出的字段:

^{pr2}$

然后,我尝试使用以下代码在HTML文件中显示字段:

{% for field in fields %}
    {{ field }}
    {{ field.help_text }}
    {{ field.errors }}
{% endfor %}

但没用-我得到了以下错误:

AttributeError at /register 'RegistrationForm' object has no attribute 'username'


Tags: name模型form表单middlefield顺序email
1条回答
网友
1楼 · 发布于 2024-04-26 23:24:45

不能简单地使用django的ModelForm组合两个表单。在

相反,您可以通过添加来自UserDetails模型的自定义用户字段来扩展RegistrationForm类。然后重写所有需要的方法(cleansave,等等)以在流中包含这些自定义字段。在

要重新排列字段,需要在新表单类中扩展/重写Meta类。在

示例:

class UserDetailsForm(RegistrationForm):
    middle_name = ...
    phone_number = ...

    class Meta:
        model = User
        fields = ('username', ..., 'password2')

我假设您的RegistrationForm表单是基于django的ModelForm

相关问题 更多 >