我是Django的新手,在迁移我的项目时遇到了一个错误“外键不匹配错误”。我的项目中有以下模型:
from django.db import models
# Create your models here.
class Product(models.Model):
product_id=models.AutoField
product_name=models.CharField(max_length=50)
product_desc=models.CharField(max_length=50)
product_date=models.DateField()
product_image=models.ImageField(upload_to="shop/images",default="")
def __str__(self):
return self.product_name
class User(models.Model):
user_email=models.EmailField(primary_key=True)
user_name=models.CharField(max_length=20)
def __str__(self):
return self.user_email
class Student(models.Model):
course=(
('MS','MS'),
('BS','BS')
)
student_name=models.CharField(max_length=40)
student_roll=models.IntegerField(primary_key=True)
student_course=models.CharField(max_length=100,choices=course)
class Order(models.Model):
user=models.ForeignKey(Student, on_delete=models.CASCADE)
id=models.IntegerField(primary_key=True)
date=models.DateField()
time=models.TimeField()
price=models.FloatField()
def __str__(self):
return str(self.id)
class Teacher(models.Model):
user_email=models.EmailField(primary_key=True)
user_name=models.CharField(max_length=20)
def __str__(self):
return self.user_email
我还创建了另外两个表;Person和Group,但我后来删除了这两个表。现在,当我使用python manage.py makemigrations和python manage.py migrate迁移我的项目时
我仍然得到错误;
django.db.utils.操作错误:外键不匹配-“shop_membership”引用“shop_person”
那么,我现在该怎么办呢?
3条答案
按热度按时间zfciruhq1#
您应该仍然拥有包含
Person
和Group
模型的移转档案。因此,您应该删除包含这些模型的移转档案,但在删除它们之前,如果您先前已套用移转,请务必还原移转。要恢复迁移,可以运行:
如果您刚开始进行项目,还可以通过运行以下命令恢复所有现有迁移:
这将恢复所有已应用的迁移,之后您只需删除所有迁移文件,然后重新运行
makemigrations
和migrate
命令以在单个文件中创建所有迁移并应用它们。4ngedf3f2#
看起来Membership模型在某个时候引用了Person模型。现在您已经删除了Person模型,您可能必须将该字段设置为null(Membership中Person的外键)或完全删除Membership表(请注意,您将丢失数据)。
8iwquhpp3#
错误仍然存在,因为某个较旧的迁移文件存在问题。这些文件用于建立数据库。请检查整个错误消息并查看它引用的迁移文件。检查外键中的primary_key是否为True。然后删除primary_key。