Gle*_*iet 6 python django django-templates django-forms
我在Django中有一个Model,下面的示例代码(不是我的实际代码):
class Department(models.Model):
name = models.CharField(max_length=100)
abbreviation = models.CharField(max_length=4)
Run Code Online (Sandbox Code Playgroud)
假设我在Django shell中执行以下操作:
>>> Department(name='Computer Science',abbreviation='C S ').save()
>>> Department(name='Mathematics',abbreviation='MATH').save()
>>> Department(name='Anthropology',abbreviation='ANTH').save()
Run Code Online (Sandbox Code Playgroud)
我现在将这四个部门存储在我的数据库中.假设我们有另一个类,Course属于Department:
class Course(models.Model):
department = models.ForeignKey('Department')
number = models.IntegerField()
class CourseForm(ModelForm):
class Meta:
model = Course
Run Code Online (Sandbox Code Playgroud)
如果我ModelForm通过引用一个变量来直接在模板中渲染对象,比如form传递下来,那么Departments就会出现在一个下拉框(HTML选择框)中.到现在为止还挺好.
问题是:选择框中的项目按ID排序.所以他们看起来像:
但是,我希望它们按字母顺序排序,即
如何更改这些项在ModelForm代码或代码中的排序方式Model,而不是在模板中?
一般来说,如何通过ModelForm?生成特定字段或窗口小部件的工作方式?
如何在ModelForm代码或Model代码中更改这些项的排序方式,而不是在模板中?
您可以做的一件事是添加元选项.您可以通过向类添加内部类来执行此操作,并指定属性:ordering Metaordering
class Department(models.Model):
name = models.CharField(max_length=100)
abbreviation = models.CharField(max_length=4)
class Meta:
ordering = ["name"]
Run Code Online (Sandbox Code Playgroud)
请注意,这会更改Department模型的默认顺序(不仅仅是在表单中使用时).
通常,如何在ModelForm生成时自定义特定字段或窗口小部件的工作方式?
您将要阅读Django文档ModelForm和内置表单字段.特别要注意可选widget属性,它允许您更改表单域的小部件.这里描述了小部件的不同类型.