更改模型管理员表单默认值

nuk*_*ukl 2 python django django-admin

我的项目中有典型的模型继承:

class A(models.Model):
    boolean_field = models.BooleanField(default=True)

class B(A):
    some_other_field = models.CharField()
Run Code Online (Sandbox Code Playgroud)

我想覆盖boolean_field类中的默认值,B我该怎么办?

我认为在数据库层上做这件事可能很棘手,所以至少我可以简单地覆盖Django admin中的默认值(我的意思是在ModelAdmin类的表单中B).

Ala*_*air 5

正如您所建议的那样,我认为最简单的方法是B在django admin中更改用于模型的模型形式.

要更改表单字段的初始值,您可以重新定义字段,也可以覆盖该__init__方法.

class BForm(forms.ModelForm):
    # either redefine the boolean field
    boolean_field = models.BooleanField(initial=False)

    class Meta:
        model = B

    # or override the __init__ method and set initial=False
    # this is a bit more complicated but less repetitive
    def __init__(self, *args, **kwargs):
        super(BForm, self).__init__(*args, **kwargs)
        self.fields['boolean_field'].initial = False
Run Code Online (Sandbox Code Playgroud)

在django admin中使用您的自定义模型表单很简单!

class BAdmin(admin.ModelAdmin):
    form = BForm

admin.site.register(B, BAdmin)
Run Code Online (Sandbox Code Playgroud)