Django中Mixin权限继承问题:模型权限在Admin面板不显示怎么办?
解决Django抽象基类权限未在Admin用户组中显示的问题
这个问题的核心原因是:Django不会自动合并抽象基类的permissions设置到子类中。当你在子类的Meta中重新定义permissions时,会直接覆盖基类的权限配置,而不是将两者合并,这就导致基类的权限不会被生成,甚至可能子类的权限也因为配置方式的问题没被正确识别。
下面是具体的修复步骤和代码示例:
1. 手动合并基类与子类的权限
在子类的Meta类中,我们需要主动将基类的权限和子类自定义的权限合并在一起:
from django.db import models class BaseMixin(models.Model): class Meta: abstract = True permissions = ( ("can_change_something", "Can change something"), ) class Article(BaseMixin): # 示例模型字段,可替换为你的实际字段 title = models.CharField(max_length=200) content = models.TextField() class Meta: # 合并基类权限和子类自定义权限 permissions = BaseMixin.Meta.permissions + ( ("can_change_something_on_articles", "Can change something on articles..."), )
2. 更新数据库权限
权限是通过Django迁移创建的,所以修改完代码后需要执行以下命令,让Django生成新的权限记录:
python manage.py makemigrations python manage.py migrate
3. 验证Admin显示
完成上述步骤后,刷新Admin面板的用户组权限设置页面,你就能看到来自基类和子类的所有权限了。
额外提醒:如果你的模型没有注册到Admin后台,权限也不会显示在用户组设置里,确保你已经在admin.py中注册了Article模型:
from django.contrib import admin from .models import Article admin.site.register(Article)
内容的提问来源于stack exchange,提问作者Myzel394
相关产品推荐
相关产品推荐

