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