Django中如何将Admin模型作为外键使用?
问题根因
代码存在三处错误导致关联关系失效:
- 外键关联目标传参错误:
models.ForeignKey第一个参数必须传入数据模型类,你当前传入的是Django内置的admin管理站点模块,不是用户数据模型,ORM无法建立表关联 - 字段拼写错误:时长字段
duraion为拼写错误,正确拼写为duration - 用户模型引用方式不规范:直接硬编码关联用户模型会在后续替换自定义用户模型时抛出兼容错误,应使用Django官方推荐的动态引用方式
修正方案
- 替换admin模块导入为用户模型配置引用
- 修正拼写错误的字段名
- 外键关联正确的用户模型,可添加
related_name支持反向查询
修正后的完整模型代码:
from django.db import models from django.conf import settings class SubscriptionPlansModel(models.Model): title = models.CharField(max_length=50) price = models.IntegerField() duration = models.IntegerField() admin = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="created_plans" )
后续操作
- 模型修改完成后,在项目目录执行
python manage.py makemigrations生成迁移文件 - 再执行
python manage.py migrate将变更同步到数据库 - 业务逻辑中可通过
user_instance.created_plans.all()直接获取指定管理员创建的所有订阅方案,如果需要限制创建者必须是管理员身份,在视图/接口层添加权限校验即可,模型层仅负责数据关联关系存储。
内容的提问来源于stack exchange,提问作者Amol_G
相关产品推荐
相关产品推荐

