【问题标题】:django Model Forms customizing fieldsdjango 模型表单自定义字段
【发布时间】:2012-12-11 05:17:31
【问题描述】:

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

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

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

【问题讨论】:

  • 请具体说明当您说它不起作用时会发生什么。例如,从您的代码中,您没有在“类”定义之后缩进一行(行包含:name = ...),这将导致语法错误。
  • 不工作是例如我不能单独使用 CharField 我需要添加 models.CharField,但是标签没有改变,因为 models.CharField 没有标签属性。 runserver 命令挂在 Validating models... 没有错误。我忘了在这里写我的问题,但不是在项目中

标签: python django django-models django-forms


【解决方案1】:

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

from django import forms


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

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

【讨论】:

  • 来自 django 导入表单 - 这就是我所缺少的。谢谢
【解决方案2】:

为了自定义模型表单中的字段,您不需要手动创建它。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2012-08-21
    • 2017-05-05
    • 1970-01-01
    • 2014-01-12
    • 2017-12-17
    • 2019-01-28
    • 1970-01-01
    相关资源
    最近更新 更多