如何在Django中使用ModelForm为模型设置一个自定义属性?

2024-05-08 16:42:06 发布

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

是否可以将一些属性写入模型字段,以便以后用于区分模板中的不同字段?在

在模型.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")

在表单.py在

^{pr2}$

在模板.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>

有什么提示吗?在


Tags: namepy模型form模板field属性models
2条回答

实际上不可能;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>

(django1.2中添加了== operator

我不明白你为什么要这么做。如果要为ModelForm字段定义自定义html,可以如下所示覆盖它:

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中找到更多详细信息

相关问题 更多 >