我正在尝试在Django 1.8.3中创建自定义用户注册表单。我想要实现的是一个表单,它由两个独立的表单组成,基于两个独立的模型。第一个模型是默认的Django User
模型,基于它的表单包含username
,email
,first_name
,last_name
,password1
和password2
个字段。第二个模型是UserDetails
,现在它只包含三个字段 - user
(应存储外键 - 用户ID),middle_name
和phone_number
。我想创建一个模板,按以下顺序显示这两个表单的字段:
username
,email
,phone_number
,first_name
,middle_name
,last_name
,password1
,password2
。问题是:有没有办法创建这些字段的列表(或任何其他集合),我可以稍后迭代这些字段以按特定顺序显示它们?我试图创建表单的实例:
registration_form = RegistrationForm()
user_details_form = UserDetailsForm()
以及我的自定义订单中的字段列表:
fields = [registration_form.username,
registration_form.email,
user_details_form.phone_number,
registration_form.first_name,
...]
然后我尝试使用以下代码在HTML文件中显示字段:
{% for field in fields %}
{{ field }}
{{ field.help_text }}
{{ field.errors }}
{% endfor %}
但它不起作用 - 我收到以下错误:
AttributeError at / register'RegisterForm'对象没有属性 '用户名'
答案 0 :(得分:0)
您不能简单地使用django' s ModelForm
合并两个表单。
您可以通过添加RegistrationForm
模型中的自定义用户字段来扩展UserDetails
类。然后覆盖所有需要的方法(clean
,save
等),以在流程中包含这些自定义字段。
要重新排序字段,您需要在新表单类中扩展/覆盖Meta
类。
示例:
class UserDetailsForm(RegistrationForm):
middle_name = ...
phone_number = ...
class Meta:
model = User
fields = ('username', ..., 'password2')
我假设您的RegistrationForm
表单基于django' s ModelForm