我试图用我自己的自定义类重写AdminSite类。我遵循了django文档中的教程:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-adminsite但它不起作用。具体地说,我想用我自己的类覆盖原始的AdminSite,而不仅仅是将另一个管理站点添加到我的项目中。在
我已经创建了从类继承的自定义类MyAdminSite
from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
pass
然后在我的应用程序中网址.py我补充道:
^{pr2}$它似乎可以工作,但是管理模型注册到adminisite而不是MyAdminSite。在
我尝试了三种方法将模型注册到我的自定义站点:
@admin.register(Model)
class ModelAdmin(model.AdminModel):
...
这样模型就注册到原始的adminisite。在
第二种方法:
@admin.site.register(Model):
class ModelAdmin(model.AdminModel):
...
这不起作用,会引起例外。ModelAdmin类未传递给register方法。在
最后一条路:
class ModelAdmin(model.AdminModel):
...
admin.site.register(Model, ModelAdmin)
这是可行的,但在管理网站上,我只能看到我的模型,而不是Django管理员(用户和组)的模型。在
我怎样才能永久地覆盖管理站点把所有模型注册到MyAdminSite?在
从myapp/管理员py公司名称:
从我的项目/网址.py在
^{pr2}$我也面临着类似的问题。我使用了django2.1和上面的评论中的the hook对我不起作用。我也不能导入GroupAdmin和UserAdmin,就像这样
由于某种原因,导入GroupAdmin或UserAdmin会破坏代码。我无法确定确切的原因。在
所以我的解决方法是(在
^{pr2}$project/urls.py
)中:这里的想法是从默认管理站点复制注册的模型。也许这样做不好,但我找不到其他有效的方法。在
我没有找到解决问题的办法,但我已经找到了解决办法。在
首先我们需要在我们的应用程序中创建模块(例如。管理员py)然后扩展类AdminSite:
然后在模块的底部,我们需要创建myadminisite的实例并从Django注册内置模型:
^{pr2}$必要进口:
在我们的站点url模块中,我们需要重写原始站点对象:
我们需要做的最后一个改变是注册我们的模型。我们需要记住的一点是,我们不能像那样使用register作为装饰器:
或者:
我们需要定义ModelAdmin类,然后调用MyAdminSite对象上的register:
这是唯一对我有用的解决方案。在
相关问题 更多 >
编程相关推荐