Django 3.2报错OperationalError:home_atliktas_darbas.bendrija_id列不存在求修复
修复Django外键关联模型的OperationalError
针对你创建Atliktas_Darbas模型时遇到的OperationalError,结合你提供的代码,按以下步骤排查修复:
1. 确认关联模型的迁移状态
- 执行命令查看迁移应用情况:
找到python manage.py showmigrationsBendrija模型所在的app,检查对应迁移项是否有[X]标记(表示已应用)。 - 如果
Bendrija未迁移,先执行:
确保python manage.py makemigrations python manage.py migrateBendrija对应的数据库表已创建。
2. 检查模型导入与定义顺序
- 确保
Atliktas_Darbas所在的models.py中正确导入Bendrija:
同app内导入:
跨app导入:from .models import Bendrijafrom your_other_app.models import Bendrija - 若两个模型在同一文件中,确保
Bendrija的定义在Atliktas_Darbas之前。
3. 验证数据库表与约束
- 直接查看数据库(如SQLite浏览器、pgAdmin等),确认
appname_bendrija表存在,且Atliktas_Darbas对应的表中bendrija_id外键字段及约束正常。 - 若
Bendrija表不存在,说明迁移执行失败,检查迁移时的终端报错信息(比如权限不足、字段冲突等)。
4. 重置迁移文件(可选)
如果之前修改过迁移文件导致依赖混乱,可按以下步骤重置:
- 备份数据库(重要!)
- 删除对应app下
migrations文件夹中除__init__.py外的所有文件 - 重新生成并应用迁移:
python manage.py makemigrations python manage.py migrate
你提供的模型代码
Bendrija模型:
class Bendrija(models.Model): class Meta: verbose_name_plural = 'Bendrijos' name = models.CharField(max_length=254) address = models.CharField(max_length=254, null=True, blank=True) def __str__(self): return self.name
Atliktas_Darbas模型:
class Atliktas_Darbas(models.Model): class Meta: verbose_name_plural = 'Atlikti Darbai' bendrija = models.ForeignKey(Bendrija, on_delete=models.CASCADE, related_name="atliktas_darbas") pavadinimas = models.CharField(max_length=254) aprasymas = models.CharField(max_length=254, null=True, blank=True) preliminari_kaina = models.CharField(max_length=254) galutine_kaina = models.CharField(max_length=254, null=True, blank=True) atlikti_iki = models.DateField() darbas_atlikas = models.DateField(null=True, blank=True) pastabos = models.CharField(max_length=254, null=True, blank=True) def __str__(self): return self.pavadinimas
内容的提问来源于stack exchange,提问作者Sir.Breezy
相关产品推荐
相关产品推荐

