Django 模型继承自多个模型之一

Django model inherit from one of several models

我是 Django 的新手,无法找出进行模型继承的正确方法。

假设我正在制作某种美食应用。然后我会有一个满足的模型,一个水果的模型,一个蔬菜的模型等等。

我的问题是:如何制作一个营养成分模型,它可以继承上述所有模型,但一次只能继承一个模型?比如苹果的营养成分只能继承水果模型。

如果只有一种食物模型类型,我会使用 ForeignKey 来处理继承。我想当有多个可供模型继承的选项时,这不是一个选项。

我想使用 on_delete=models.CASCADE 作为营养成分模型。因此请求继承。

如有任何建议,我们将不胜感激。

Python class继承和Django模型的ForeignKey关系是两个完全不同的东西。听起来你指的是后者。

不同食物类型之间的字段是否如此不同,以至于您实际上需要为每种食物使用不同的模型?最简单的方法是只为所有食物类型设置一个食物模型。

class Food(models.model):
    VEGETABLE = 'vegetable'
    MEAT = 'meat'
    FRUIT = 'fruit'
    TYPE_CHOICES = [
        (VEGETABLE, 'vegetable'),
        (MEAT, 'meat'),
        (FRUIT, 'fruit'),
    ]
    type = models.CharField(max_length=10, choices=TYPE_CHOICES)
    nutrition_content = models.OneToOneField('NutritionContent', on_delete=models.CASCADE)
    # additional fields

class NutritionContent(models.Model):
    # additional fields

如果您的字段在食物类型之间差异很大,以至于您需要为每种食物设置不同的模型,您可以将 Food 设置为父模型,所有子食物类型模型都与之具有 OneToOneField 关系。那么 NutritionContent 模型仍然可以 link with Food.

class Food(models.model):
    nutrition_content = models.OneToOneField('NutritionContent', on_delete=models.CASCADE)
    # fields that apply to all foods

class Vegetable(models.Model):
   food = models.OneToOneField('Food', on_delete=models.CASCADE)
   # additional fields that only apply to vegetables

class Meat(models.Model):
   food = models.OneToOneField('Food', on_delete=models.CASCADE)
   # additional fields that only apply to meat

class Fruit(models.Model):
   food = models.OneToOneField('Food', on_delete=models.CASCADE)
   # additional fields that only apply to fruit

class NutritionContent(models.Model):
    # additional fields