如何在Django ModelForm中订购字段?

时间:2010-05-23 21:11:19

标签: python sorting django-forms

我有'订单'型号:

class Order(models.Model):
     date_time=models.DateTimeField()
     # other stuff

我正在使用Django ModelForm类来渲染表单,但我想分别显示日期和时间小部件。我想出了这个:

class Form(forms.ModelForm): 
    class Meta:
        model = Order
        exclude = ('date_time',)
        date = forms.DateField()
        time = forms.TimeField()

问题是我想把这些字段放在“其他东西”之间的某个地方

3 个答案:

答案 0 :(得分:61)

您可以使用:

class Meta:
    fields = [ ..., 'date', 'time', ... ]

请参阅文档:http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-order-of-fields

答案 1 :(得分:1)

添加到Lukasz的答案,在Django 2.0中,完整的管理表单注册与字段排序将如下所示:

models.py

class Order(models.Model):
    date_time = models.DateTimeField()
    # other fields

admin.py

class OrderForm(forms.ModelForm):
    datef = forms.DateField()
    timef = forms.TimeField()

    class Meta:
      model = Order
      exclude = ['date_time']
      fields = (
          'datef',
          'timef',
          # other fields
      )

class OrderAdmin(admin.ModelAdmin):
    form = OrderForm

admin.site.register(Order, OrderAdmin)

请注意,日期和时间字段在ModelForm类中定义,而不是在Meta类中定义。

答案 2 :(得分:-3)

只需更改models.py中类属性的顺序即可。适用于1.9