Python django.db.utils.OperationalError:外键不匹配-“;订单“子订单”;引用;订单;
我有一个父类Python django.db.utils.OperationalError:外键不匹配-“;订单“子订单”;引用;订单;,python,django,django-models,Python,Django,Django Models,我有一个父类Sub(具体)和一个子类SubOrder。一个子目可以“拥有”(即处于)多个子目,而一个子目可以“拥有”(包含)多个子目。现在,当我尝试创建子对象时,会出现以下错误: django.db.utils.OperationalError: foreign key mismatch - "orders_suborder" referencing "orders_sub" 这里有什么问题?我是否需要使用ManyToManyField(如果需要,原因和位置?)以及为什么会出现此错误 这些是我
Sub
(具体)和一个子类SubOrder
。一个子目可以“拥有”(即处于)多个子目,而一个子目可以“拥有”(包含)多个子目。现在,当我尝试创建子对象时,会出现以下错误:
django.db.utils.OperationalError: foreign key mismatch - "orders_suborder" referencing "orders_sub"
这里有什么问题?我是否需要使用ManyToManyField
(如果需要,原因和位置?)以及为什么会出现此错误
这些是我在models.py中的类:
class Sub(Dish):
dish = models.OneToOneField(Dish, on_delete=models.CASCADE, related_name="dish_id_sub", parent_link=True)
def __str__(self):
return f"{self.name}, Price: ${self.price}"
class SubOrder(Sub):
sub_id = models.ForeignKey(Sub, related_name="sub_id", parent_link=True)
item_id = models.ForeignKey(Item, on_delete=models.CASCADE, primary_key=True, related_name="sub_item_id")
extra_count = models.IntegerField(default=0, validators=[MaxValueValidator(4), MinValueValidator(0)])
MUSHIES = 'M'
PEPPERS = 'P'
ONIONS = 'O'
XTRCHEESE = 'C'
EXTRA_CHOICES = ((MUSHIES, 'Mushrooms'), (PEPPERS, 'Peppers'), (ONIONS, 'Onions'), (XTRCHEESE, 'Extra Cheese'),)
extra_1 = models.CharField(max_length=1, choices=EXTRA_CHOICES, blank=True)
extra_2 = models.CharField(max_length=1, choices=EXTRA_CHOICES, blank=True)
extra_3 = models.CharField(max_length=1, choices=EXTRA_CHOICES, blank=True)
extra_4 = models.CharField(max_length=1, choices=EXTRA_CHOICES, blank=True)
def __str__(self):
extras = []
for i in range(extra_count):
str = "extra_"+i
extras.append(str)
return f"Sub Order: Item {self.item_id}, {self.name}, size: {self.size}. {self.extra_count} Extras: {extras}"
如果重要的话,这里是子
的父类Dish
,但我认为这不是问题所在:
class Dish(models.Model):
PIZZA = 'PIZZA'
SUB = 'SUB'
PASTASALAD = 'PASTASALAD'
PLATTER = 'PLATTER'
TYPE_CHOICES = ( (PIZZA, 'Pizza'), (SUB, 'Sub'), (PASTASALAD, 'PastaSalad'), (PLATTER, 'Platter') )
name = models.CharField(max_length=64, blank=True)
type = models.CharField(max_length=64, choices=TYPE_CHOICES, blank=True)
size = models.CharField(max_length=1, choices=SIZE_CHOICES, default=SMALL, blank=True)
price = models.DecimalField(max_digits=6, decimal_places=2, default=None)
def __str__(self):
return f"{self.name} {self.size} - Price: ${self.price}"
操作错误一个快速修复在迁移命令后运行migrate命令,请尝试运行python manage.py makemigrations
然后运行python manage.py migrate
操作错误一个快速修复在迁移命令后运行migrate命令,尝试运行python manage.py makemigrations
,然后运行python manage.py migrate