Django python 中的外键不匹配错误

Khi*_*hid 2 python sqlite django model migrate

我是 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
Run Code Online (Sandbox Code Playgroud)

我还创建了另外两个表;PersonGroup但是我后来删除了这两个表。现在,当我使用python manage.py makemigrations迁移我的项目 ,然后 使用 python manage.py migrate

我仍然收到错误;

django.db.utils.OperationalError:外键不匹配 - “shop_membership”引用“shop_person”

那么,我现在该怎么办?

小智 8

您应该仍然拥有包含PersonGroup模型的迁移文件。因此,您应该删除包含这些模型的迁移文件,但在删除它们之前,如果您之前应用过迁移,请务必还原迁移。

要恢复迁移,您可以运行:

python manage.py migrate app_name xxxx_migration_before_the_one_you_want_to_un_apply
Run Code Online (Sandbox Code Playgroud)

如果您刚刚开始该项目,您还可以通过运行以下命令来恢复所有现有迁移:

python manage.py migrate app_name -- zero
Run Code Online (Sandbox Code Playgroud)

这将恢复所有已应用的迁移,之后您只需删除所有迁移文件,然后重新运行makemigrations命令migrate以在单个文件中创建所有迁移并应用它们。