Django访问admin后台Profile页报错no such column: users_profile.user_id
错误原因
- 根本原因是修改Profile模型新增
user外键字段后,没有将模型变更同步到数据库,导致数据库表users_profile缺少对应的user_id外键列,触发查询报错。 - 你的Profile模型存在两处笔误,不修复会导致迁移生成失败:
short_intro字段定义末尾多了一个多余的>符号social_github字段被重复定义了两次
修复步骤
- 先修正Profile模型的笔误,参考修正后的代码片段:
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True) name = models.CharField(max_length=200, blank=True, null=True) email = models.EmailField(max_length=500, blank=True, null=True) # 移除末尾多余的> short_intro = models.CharField(max_length=200, blank=True, null=True) bio = models.TextField(blank=True, null=True) profile_image = models.ImageField(null = True, blank = True, upload_to='profiles/', default="profiles/user-default.png") # 只保留一个social_github定义,删除重复行 social_github = models.CharField(max_length=500, null=True, blank=True) social_linkedIn = models.CharField(max_length=500, null=True, blank=True) social_youtube = models.CharField(max_length=500, null=True, blank=True) social_website = models.CharField(max_length=500, null=True, blank=True) created = models.DateTimeField(auto_now_add=True, editable=False) id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False) # 优化__str__方法,避免user为null时报错 def __str__(self): if self.user: return self.user.username return self.name if self.name else "未绑定用户的Profile"
- 进入项目根目录,执行命令生成users应用的迁移文件:
python manage.py makemigrations users - 执行迁移命令将变更同步到数据库:
python manage.py migrate users - 重启Django开发服务器,再次访问admin后台的Profile页面即可正常加载。
特殊情况处理:如果执行迁移时提示字段冲突、迁移历史异常,可以先删除users应用
migrations目录下除__init__.py外的所有文件,再删除项目根目录的SQLite数据库文件(db.sqlite3,操作前注意备份已有数据),之后重新执行上述的makemigrations和migrate命令即可。
内容的提问来源于stack exchange,提问作者Serage
相关产品推荐
相关产品推荐

