You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:37:54