如何将自定义属性设置为可以在Django中使用ModelForm的模板中使用的模型?
问题描述:
是否可以将某些属性写入模型字段,稍后可以使用该字段来区分模板中的不同字段?如何将自定义属性设置为可以在Django中使用ModelForm的模板中使用的模型?
model.py
from django.db import models
class Person(models.Model):
first_name = models.CharField("i am the Label", max_length=30)
last_name = models.CharField("i am other Label", max_length=30, customattr="Custom")
forms.py
class PersonForm(ModelForm):
class Meta:
Person
template.html
<form action="" method="post">{% csrf_token %}
{% for field in form %}
{% ifequal field.customattr 'Custom' %} # HOW COULD THIS WORK?
<p>Hello world.</p>
{{ field }}
{% else %}
<p>This is not Custom</p>
{{ field }}
{% endifequal %}
{% endfor %}
<input type="submit" value="Submit" />
</form>
任何提示?
答
不太可能;您的模板代码中的field
是一个表单字段,而不是一个模型字段。我将表示逻辑从模型转移到模板,做这样的事情:
<form action="" method="post">{% csrf_token %}
{% for field in form %}
{% if field.name == 'last_name' or field.name == 'another_field' %}
<p>Hello world.</p>
{{ field }}
{% else %}
<p>This is not Custom</p>
{{ field }}
{% endif %}
{% endfor %}
<input type="submit" value="Submit" />
</form>
答
(在== operator是在Django 1.2中加入)我不明白为什么哟想干什么这个。如果您想自定义HTML您的ModelForm场可以覆盖它是这样的:
class PersonForm(ModelForm):
class Meta:
Person
first_name = forms.CharField(
required = True,
widget = forms.TextInput(attrs={'style':'width:100px;'},
)
这样你就可以告诉Django你想如何使您的HTML。 您可以在文档中找到更多详细信息https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets
+0
嗨@mounir我喜欢在一个附加属性的帮助下组字段。我正在计划用字段迭代进行分组...... – Jurudocs 2013-05-14 18:32:49
可能重复? http://stackoverflow.com/questions/8407837/django-custom-attributes-for-model-fields – 2013-05-13 18:25:43