Skip to main content
 首页 » 编程设计

python之如何让 django 管理员更改表单以预选选择字段

2024年11月24日32lovecherry

我有一个带有选择的模型字段,定义如下:

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) 但无济于事。

我在模型 CharField 上有一个类似的选择,但没有这个问题。 DecimalField 是否发生了我不知道的事情?

请您参考如下方法:

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

参见 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