【问题标题】:Django admin widget override for all of abstract modelDjango 管理小部件覆盖所有抽象模型
【发布时间】:2020-03-21 20:14:48
【问题描述】:

我有一个抽象模型,其中包含我想在管理视图中覆盖小部件的字段类型。

现在您无法在管理视图中注册抽象模型,因此我必须为从抽象模型继承的每个模型覆盖小部件。这感觉很笨拙 - 有没有更简洁的方法来做到这一点?

models.py


class MyAbstractModel(Model):
    field_with_widget_i_want_to_override = MyFieldType()    

    class Meta:
        abstract = True

class ModelA(MyAbstractModel):
    extra_field = AnotherFieldType()

class ModelB(MyAbstractModel):
    different_extra_field = ADifferentFieldType()

admin.py

class ModelAAdmin(ModelAdmin):
    formfield_overrides = {
        MyFieldType: {'widget': MyWidget},
    }

class ModelBAdmin(ModelAdmin):
    formfield_overrides = {
        MyFieldType: {'widget': MyWidget},
    }

admin.site.register(ModelA, ModelAAdmin)
admin.site.register(ModelB, ModelBAdmin)

现在我的实际项目有点复杂,所以我不想在注册模型时结合 ModelAdmins,还有更多的模型继承自抽象基础模型,所以我觉得我在重复自己很多。

或者,有没有办法全局覆盖管理员中用于字段类型的小部件(适用于所有模型)?

【问题讨论】:

    标签: django


    【解决方案1】:

    抽象模型不能注册为 ModelAdmin,因为它们是抽象的,django 不能将它们视为数据模型,因此大多数管理功能不能应用于这些类 - 所以你需要用一个空类覆盖它至少就像这里的文档一样 Abstract classes 无法将数据分配给抽象模型

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2010-11-19
      • 2016-05-13
      • 2017-11-24
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多