代码之家  ›  专栏  ›  技术社区  ›  joozek

如何在Django ModelForm中订购字段?

  •  36
  • joozek  · 技术社区  · 16 年前

    我有一个“订单”模型:

    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 回复  |  直到 7 年前
        1
  •  62
  •   tread    7 年前

    您可以使用:

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

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

        2
  •  1
  •   Alex Volkov    8 年前

    在Django 2.0中,除了Lukasz answer之外,完整的带有字段顺序的管理表单注册如下所示:

    模型.py

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

    管理.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类中定义的。

        3
  •  -3
  •   MartinM    10 年前

    只需更改 models.py . 在1.9中工作