覆盖Django管理员操作

时间:2019-09-24 11:14:32

标签: django django-admin

我有一个基本的管理员模型,我设法覆盖了某些行,例如内联,字段等,但是由于某些原因,我无法覆盖操作,我缺少了什么?

boolean found = Predicates.isStringValueAllowed(list).test(valueToCheck);

订单模型应仅具有“ some_new_action”操作,但仅具有基本管理操作“ some_action”,因此不会被覆盖。

2 个答案:

答案 0 :(得分:0)

您不想在OrderAdmin和父类中两次注册模型。这可能会产生一些奇怪的效果(例如您的动作)。跨ModelAdmin类重用功能的一种简单方法是将其放入mixin,然后在需要的地方包括该mixin。像这样:

class CommonAdminMixin:
    actions = ['some_action']


@admin.register(Order)
class OrderAdmin(CommonAdminMixin, models.Admin):
    actions = []


@admin.register(AnotherModel)
class AnotherAdmin(CommonAdminMixin, models.Admin):
    ...

答案 1 :(得分:0)

类似于mixin解决方案,但我将改用父类,这样您就可以在方法中调用super()而不会产生任何怪异。

class BaseAdmin(admin.ModelAdmin):
    actions = ['some_action']


@admin.register(Order)
class OrderAdmin(BaseAdmin):
    model = Order


@admin.register(AnotherModel)
class AnotherAdmin(BaseAdmin):
    model = AnotherModel
    actions = []

您只需覆盖admin.ModelAdmin类中的BaseAdmin并从BaseAdmin继承。然后,您可以像对待BaseAdmin一样有效地对待admin.ModelAdmin