django模型表单自定义字段

时间:2012-12-25 02:22:04

标签: python django django-models django-forms

我创建了一个包含一些类的模型:

class Student(models.Model):
    name = models.CharField(max_length=40)
    last_name = models.CharFIeld(max_length=40)
(...)

并且在底部的相同models.py文件中我添加了一个与我的某个模型相对应的类,因此我可以创建一个表单:

class StudentForm(ModelForm):
    class Meta:
        model = Student

如何自定义通过ModelForm类创建的表单字段?我正在阅读django文档,我无法理解覆盖默认类型部分。 例如,在文档中他们说这将起作用:

class ArticleForm(ModelForm):
    pub_date = DateField(label='Publication date')

    class Meta:
        model = Article

但是当我输入我的值时,它无效。我无法定义我的标签:

class StudentForm(ModelForm):
    name = CharField(label='New label')

    class Meta:
        model = Student

我是否必须使用与Model类相同的字段创建一个类似forms.py的文件,然后自定义它们?是否可以仅使用模型表单更改单个字段css属性,如宽度,高度?

2 个答案:

答案 0 :(得分:5)

表单字段使用差异库来创建from。您需要导入django.forms并将form.XXX用于特定字段

from django import forms


class StudentForm(ModelForm):
    class Meta:
        model = Student

    subject = forms.CharField(label='New label')

答案 1 :(得分:1)

为了在模型表单中自定义字段,您不需要手动创建它。 Django模型字段具有特殊属性:

  • verbose_name(转到该字段的标签)
  • help_text(默认情况下在字段下方显示为附加说明)

所以,你所需要的只是:

class Student(models.Model):
    name = models.CharField(max_length=40,
                            verbose_name="Student's Name", 
                            help_text="Please tell me your name")  # Optional
    last_name = models.CharFIeld(max_length=40)
    ...

然后,您不需要以模型形式进行任何自定义。

请参阅:https://docs.djangoproject.com/en/dev/ref/models/fields/#verbose-name