簡體   English   中英

外鍵不匹配錯誤 Django python

[英]Foreign key mismatch error in Django python

我是 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

我還創建了另外兩個表; PersonGroup但是我后來把這兩個表刪掉了。 現在,當我使用python manage.py makemigrations然后python manage.py migrate遷移我的項目時

我仍然得到錯誤;

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

那么,我現在該怎么辦?

您應該仍然擁有包含PersonGroup模型的遷移文件。 因此,您應該刪除包含這些模型的遷移文件,但在刪除它們之前,如果您之前應用過它們,請務必還原遷移。

要恢復遷移,您可以運行:

python manage.py migrate app_name xxxx_migration_before_the_one_you_want_to_un_apply

如果您剛剛開始使用該項目,您還可以通過運行以下命令恢復所有現有遷移:

python manage.py migrate app_name -- zero

這將恢復所有已應用的遷移,之后您可以簡單地刪除所有遷移文件,然后重新運行makemigrationsmigrate命令以在單個文件中創建所有遷移並應用它們。

似乎 Membership model 在某個時候引用了 Person model。 現在您已經刪除了 Person model,您可能必須將該字段設置為 nulll(Person in Membership 的外鍵)或完全刪除 Membership 表(請注意您將丟失數據)。

錯誤仍然存在,因為您在其中一個較舊的遷移文件中遇到問題。 這些文件用於建立您的數據庫。 檢查整個錯誤消息並查看它引用了哪個遷移文件。 檢查您的外鍵中是否有 primary_key=True 。 然后刪除 primary_key。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM