0

我试图弄清楚实现这种行为的最佳方法是什么:

我有一个“配方”类型的对象,其相关模型“IngredientRecipe”是从“产品”列表中获得的,其中包含有关其“供应商”的信息。一个食谱可能有“牛肉”作为一种成分,这种成分由几个供应商提供。我想要获得的是一个配方,其成分列表与所选位置的供应商提供的成分相对应。

例如:

https://api.url/recipes/34/?location=1

这将返回 id=34 的食谱的详细信息和成分列表,但来自 id=1 的位置。也就是说,成分“牛肉”的价格将是与位置 id=1 的供应商对应的价格。

模型.py:

class Recipe(models.Model):
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE, related_name='user_recipes')
    title = models.CharField(_('Recipe title'), max_length=255, blank=True)


class IngredientRecipe(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='products')
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, related_name='ingredients')
    quantity = models.FloatField(_('Quantity'))


class Product(models.Model):
    name = models.CharField(_('Name'), max_length=255)
    price = models.FloatField(_('Sale price'), default=0)
    supplier = models.ForeignKey(Supplier, blank=True, null=True, related_name='supplier_products',
                                 on_delete=models.CASCADE)


class Supplier(models.Model):
    name = models.CharField(_('Name'), max_length=255)
    location = models.ForeignKey(Location, on_delete=models.CASCADE)

现在我正在使用 ModelViewSets 和 ModelSerializers 来渲染保存我的对象。

非常感谢您提前。

4

1 回答 1

0

您可以related_name='ingredients'在配方字段IngredientRecipe

def your_view_name(request, recipie_id):
    data = request.query_params # to take the location id query parameter
    data._mutable = True # dictionary from frontend immutable sometimes
    location_id = data.location
    recipie_list = Recipe.objects.filter(ingredients__product__supplier__location__id=location_id) # will get the recipie queryset based on the location.
于 2021-06-13T11:03:17.993 回答