如何在Django ModelForm中排序字段?

41 投票
2 回答
36064 浏览
提问于 2025-04-15 23:03

我有一个叫做“订单”的模型:

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()

问题是我想把这些输入框放在“其他内容”的中间。

2 个回答

2

补充一下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类中。

69

你可以使用:

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

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

撰写回答