Django 通过直接查询中间模型访问额外字段

Django 通过直接查询中间模型访问额外字段,django,model,Django,Model,我有以下问题: 我需要得到一份食谱的配料量 这是my models.py: class Ingredient(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Recipe(models.Model): name = models.CharField(max_length=100) ingredient

我有以下问题: 我需要得到一份食谱的配料量

这是my models.py:

class Ingredient(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Recipe(models.Model):
    name = models.CharField(max_length=100)
    ingredients = models.ManyToManyField(Ingredient, through='RecipeHasIngredients')

    def __str__(self):
        return self.name

class RecipeHasIngredients(models.Model):
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    quantity = models.IntegerField()

    def __str__(self):
        return str(self.recipe)

有两种解决方案:

  • 直接查询
    RecipeHasingElements

    RecipeHasingElements.objects.filter(配方=配方)

  • 通过使用

    recipe_instance.components.through.objects.all()


  • 在这两种情况下,您都会得到给定配方的
    RecipeHasingComponents
    实例列表

    使用第一个解决方案,我只得到配方的名称,但我需要数量。对于第二个解决方案,我得到一个错误:类型对象“RecipeHasingElements”没有属性“all”。那么,我如何获取成分的数量呢?第一个解决方案返回一个列表
    打印(类型(值))
    以确保它不是字符串,第二个解决方案也已修复。是的,我获取的是
    RecipeHasingElements的列表,但不是数量。我使用:
    RecipeHasingElements.objects.filter(recipe=recipe)解决了我的问题.values\u list('quantity',flat=True)