Python Django如何设置ModelForm的自定义属性
我有一个forms.ModelForm“CreateUserForm” 我想为每个表单字段设置一个属性,以便以后在模板中使用 在这种情况下,我想设置一个图标名来指定每个字段应该使用哪个图标名Python Django如何设置ModelForm的自定义属性,python,django,Python,Django,我有一个forms.ModelForm“CreateUserForm” 我想为每个表单字段设置一个属性,以便以后在模板中使用 在这种情况下,我想设置一个图标名来指定每个字段应该使用哪个图标名 class CreateUserForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput) icon_names = ['person', 'email', 'enhanced_encryptio
class CreateUserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
icon_names = ['person', 'email', 'enhanced_encryption']
class Meta:
model = User
fields = ['username', 'email', 'password']
我在迭代字段和字段的属性“icon\u names”时遇到问题。我真的不能不失去功能
目前,我已经使用“forloop.parentloop.counter”将迭代拼凑在一起
{% for field in form %}
<div class="form-group">
<div class="input-field">
<i class="icons">
{% for icon in form.icon_names %}
{% if forloop.parentloop.counter == forloop.counter %}
{{ icon }}
{% endif %}
{% endfor %}
</i>
<input type="text" id="autocomplete-input" class="autocomplete">
<label class="control-label" for="autocomplete-input">{{ field.label_tag }}</label>
</div>
</div>
{% endfor %}
{%用于表单%]中的字段
{%用于表单中的图标。图标\名称%}
{%if-forloop.parentloop.counter==forloop.counter%}
{{icon}}
{%endif%}
{%endfor%}
{{field.label_tag}
{%endfor%}
这会产生预期的结果,但似乎是多余的,特别是如果我想在将来添加另一个字段属性
正确的方法是什么?一种方法是在上下文中传递
zip
ped列表,例如:
context = {'fields_with_icons': zip(form.icon_names, [field for field in form])}
然后
{% for field, icon in fields %}
{{ field }}
{{ icon }}
{% endfor %}
有两种方法可以做到这一点,都涉及在fields小部件上添加额外的html属性
super()之后出现
othersself.fields将不会被填充……当我没有任何其他需要在widget类上调整的内容时,我会使用此选项。
class PersonForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['age'].widget.attrs['icon'] = 'age'
class Meta:
model = models.Person
fields = ('name', 'age')
widgets = {
'name': forms.TextInput(attrs={'icon': 'email'})
}
在模板上,当在字段上循环时,我得到如下结果
{% for field in form %}
{{ field.field.widget.attrs.icon }}
{% endfor %}