Django Admin权限列表中部分模型权限缺失问题求助
Django Admin 权限显示异常:仅User模型权限可见
Account模块包含多个模型,但在Django Admin的权限列表中,只有User模型的权限能正常显示,其余如Child、Agent、UserSubscriptionLogs等模型的权限完全未显示。
未显示权限的模型示例
class Child(TimeStampedModel): child_id = models.UUIDField(default=uuid.uuid4, unique=True) fullname = models.CharField(max_length=200) date_of_birth = models.DateField() profile_image = models.URLField(null=True) grade = models.CharField(max_length=20) school_name = models.CharField(max_length=255) field_of_interest = ArrayField(models.CharField(max_length=200), default=list) school = models.ForeignKey(School, on_delete=models.SET_NULL, null=True) contest_qualification_level = models.ForeignKey(ContestQualificationLevel, on_delete=models.SET_NULL, null=True,related_name='child_contest_qualification_level') contest_scope = models.ForeignKey(ContestScope, on_delete=models.SET_NULL, null=True) hold_contest_qualification_level = models.ForeignKey(ContestQualificationLevel, on_delete=models.SET_NULL, null=True, related_name='child_hold_contest_qualification_level') teacher_name = models.CharField(max_length=200, null=True) teacher_mobile_number = models.CharField(max_length=20, null=True) class Agent(TimeStampedModel): agent_name = models.CharField(max_length=200) class UserSubscriptionLogs(TimeStampedModel): user = models.ForeignKey(User, on_delete=models.CASCADE) subscription = models.ForeignKey('order.Subscription', on_delete=models.CASCADE) amount_paid = models.FloatField(default=0) currency_code = models.CharField(max_length=5)
可能的原因及解决办法
1. 模型未注册到Admin
Django仅为注册到Admin后台的模型自动生成权限。如果这些模型没在admin.py中注册,权限不会出现在列表里。
解决: 在Account模块的admin.py中添加注册代码:
from django.contrib import admin from .models import Child, Agent, UserSubscriptionLogs admin.site.register(Child) admin.site.register(Agent) admin.site.register(UserSubscriptionLogs)
2. 模型Meta类配置异常
检查模型的Meta类是否设置了managed = False(非托管模型Django不生成权限),或者抽象基类TimeStampedModel的Meta未设置abstract = True。
解决:
- 确保模型
Meta类中managed为True(默认值,若手动修改过需改回); - 确认抽象基类的
Meta配置正确:
class TimeStampedModel(models.Model): # ... 时间戳字段 ... class Meta: abstract = True # 必须设为True,否则会干扰子类权限生成
3. 数据库权限未同步
新增模型后,数据库的auth_permission表可能未同步更新权限记录。
解决: 执行以下命令刷新权限:
# 生成并应用迁移 python manage.py makemigrations python manage.py migrate # 手动生成权限(若迁移后仍无效) python manage.py createpermissions
4. 自定义权限覆盖默认权限
如果模型显式定义了permissions但未包含默认的增删改查权限,会导致默认权限不显示。
解决: 若需保留默认权限,自定义权限时不要覆盖默认逻辑,或手动添加默认权限条目。
内容的提问来源于stack exchange,提问作者ibex
相关产品推荐
相关产品推荐

