如何获取django管理员更改表格以预选选择字段?

时间:2019-03-19 23:39:06

标签: python django django-models

我有一个带有选择项的模型字段,如下所示:

class Pack(models.Model):
    SIZE_10x20 = Decimal(200.000)
    SIZE_10x10 = Decimal(100.000)
    SIZE_5x10 = Decimal(50.000)

    size_code_choices = (
        (SIZE_5x10, '5x10'),
        (SIZE_10x10, '10x10'),
        (SIZE_10x20, '10x20'),
    )
    size_code = models.DecimalField(max_digits=7,
                                    decimal_places=3,
                                    choices=size_code_choices,
                                    default=SIZE_10x20)

我的admin.py使用默认格式:

class PackAdmin(admin.ModelAdmin):
    list_display = ('size_code')
    fields = ('size_code')

admin.site.register(Pack, PackAdmin)

但是,当我打开管理面板并检查模型实例更改形式时,下拉菜单并未预先设置为存储在数据库中的选项。我已经附上了两张图片来说明我的意思:

List display for all model instances

Change Model Form

它只是选择列表顶部的一个。我希望用户能够对模型进行小的更改,而不必每次使用此表单时都必须检查并重置此字段。

我研究了重写ModelAdmin.get_changeform_initial_data(request),但无济于事。

我在Model CharField上有一个类似的选择选择,并且没有这个问题。我不知道DecimalField有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您需要为模型创建一个表单,并设置初始值:

请参阅https://docs.djangoproject.com/en/2.1/ref/forms/fields/#initial

然后替换管理员上的表单:

请参阅https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form