Django管理员 - 重写已注册的模型 [英] Django admin - override already registered model

查看:120
本文介绍了Django管理员 - 重写已注册的模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要覆盖 django-eav 应用程序管理类。在 eav / admin.py 中注册了模型: admin.site.register(Value)。我需要将 list_display 添加到此模型中。我知道修改安装的应用程序代码是不好的做法,所以我需要覆盖它。但是,不知道如何。在我自己的 app / admin.py 我有:

I need to override django-eav app admin class. In eav/admin.py model is registered: admin.site.register(Value). I need to add list_display to this model. I know that it is bad practise to modify installed app code, so i need to override it. But, not sure how. In my own app/admin.py i have:

class EavValueAdmin(ModelAdmin):
    list_display = ('__unicode__', 'value_text', )

#unregistering class from eav.admin
admin.site.unregister(Value)
admin.site.register(Value, EavValueAdmin)

这给我一个错误: NotRegistered :模型值未注册
如果我尝试评论这一行: admin.site.unregister(Value),还有错误:已经注册:模型值已经注册了< STRONG>。如何克服这个问题?

This gives me an error: NotRegistered: The model Value is not registered. If i try to comment this line: admin.site.unregister(Value), also error: AlreadyRegistered: The model Value is already registered. How can i overcome this problem?

推荐答案

Django应用程序按 INSTALLED_APPS中列出的顺序加载在您的 settings.py 中。因此,您的应用程序必须在 django-eav 之后才能取消注册:

Django apps are loaded in the order they are listed in INSTALLED_APPS in your settings.py. Therefore your app must come after django-eav to be able to unregister it:

INSTALLED_APPS = [...
   'django-eav',
   ...
   'my_app',
]

通常你的应用程序必须来自内置和第三方应用程序。您必须测试您的项目,以便在更改订单后看是否一切顺利。

Usually your apps must come after built-in and 3rd party apps. You have to test your project to see if everything works smoothly after changing the order.

这篇关于Django管理员 - 重写已注册的模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆