django扩展ModelAdmin字段集并保留默认值

sec*_*ond 6 django-admin

有没有一种很好的方法可以自定义项添加到子类ModelAdmin字段集,即保持所有默认值和一些额外的.

(我知道我可以自己添加所有默认值,但希望有一个更好的方式)

use*_*391 10

您可以覆盖ModelAdmin的get_fieldsets方法.

默认实现如下所示:

def get_fieldsets(self, request, obj=None):
    "Hook for specifying fieldsets for the add form."
    if self.declared_fieldsets:
        return self.declared_fieldsets
    form = self.get_form(request, obj)
    fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
    return [(None, {'fields': fields})]
Run Code Online (Sandbox Code Playgroud)

所以你可以覆盖它,例如:

class MyCustomAdmin(ModelAdmin):
    def get_fieldsets(self, request, obj=None):
        fs = super(MyCustomAdmin, self).get_fieldsets(request, obj)
        # fs now contains [(None, {'fields': fields})], do with it whatever you want
        all_fields = fs[0][1]['fields']
        return fs
Run Code Online (Sandbox Code Playgroud)


Mat*_*kel 2

未经测试,但可能有效:

class MyAdmin(BaseAdmin):
    fieldsets = BaseAdmin.fieldsets + (...)
Run Code Online (Sandbox Code Playgroud)

这将(如果有效的话)在继承的字段集之后添加其他字段集。