当前位置:  开发笔记 > 编程语言 > 正文

控制Django ModelForm输出

如何解决《控制DjangoModelForm输出》经验,为你挑选了1个好方法。

我在Django中有一个Model,下面的示例代码(不是我的实际代码):

class Department(models.Model):
    name = models.CharField(max_length=100)
    abbreviation = models.CharField(max_length=4)

假设我在Django shell中执行以下操作:

>>> Department(name='Computer Science',abbreviation='C S ').save()
>>> Department(name='Mathematics',abbreviation='MATH').save()
>>> Department(name='Anthropology',abbreviation='ANTH').save()

我现在将这四个部门存储在我的数据库中.假设我们有另一个类,Course属于Department:

class Course(models.Model):
    department = models.ForeignKey('Department')
    number = models.IntegerField()

class CourseForm(ModelForm):
    class Meta:
        model = Course

如果我ModelForm通过引用一个变量来直接在模板中渲染对象,比如form传递下来,那么Departments就会出现在一个下拉框(HTML选择框)中.到现在为止还挺好.

问题是:选择框中的项目按ID排序.所以他们看起来像:

    计算机科学

    数学

    人类学

但是,我希望它们按字母顺序排序,即

    人类学

    计算机科学

    数学

如何更改这些项在ModelForm代码或代码中的排序方式Model,而不是在模板中?

一般来说,如何通过ModelForm?生成特定字段或窗口小部件的工作方式?



1> mipadi..:

如何在ModelForm代码或Model代码中更改这些项的排序方式,而不是在模板中?

您可以做的一件事是添加元选项.您可以通过向类添加内部类来执行此操作,并指定属性:ordering Metaordering

class Department(models.Model):
    name = models.CharField(max_length=100)
    abbreviation = models.CharField(max_length=4)

    class Meta:
        ordering = ["name"]

请注意,这会更改Department模型的默认顺序(不仅仅是在表单中使用时).

通常,如何在ModelForm生成时自定义特定字段或窗口小部件的工作方式?

您将要阅读Django文档ModelForm和内置表单字段.特别要注意可选widget属性,它允许您更改表单域的小部件.这里描述了小部件的不同类型.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有