【发布时间】:2021-06-07 07:16:41
【问题描述】:
假设我有这样的模型:
class Pizza(models.Model):
name = models.CharField(max_length=100)
class Topping(models.Model):
name = models.CharField(max_length=100)
class Flavor(models.Model):
name = models.CharField(max_length=100)
of_topping = models.ForeignKey(Topping, on_delete=models.CASCADE)
on_pizzas = models.ManyToManyField(Pizza)
然后,我要在“意大利腊肠”上添加“辣”、“不辣”和“意大利”三种口味,在“木耳”上添加“香菇”、“牛肝菌”和“木耳”口味。
比萨受到限制,它不能包含同一 Topping 类但口味不同的两种浇头。 (例如,没有意大利腊肠和辣味腊肠的披萨)。
现在,假设我的披萨店提供这些披萨:
- 玛格丽特(无浇头)
- 意大利腊肠(非辣味腊肠)
- Funghi(香菇)
- 美味(意大利腊肠和香菇)
- 有毒(辣香肠和木耳)
- 特色菜(意大利腊肠和牛肝菌)
现在,对于客户 Bob,我知道是约束,例如他会吃香菇和意大利腊肠(但也会吃任何只有其中一部分作为配料的东西)。 对于 Bob,我不想知道我可以给他 Margherita、Funghi 或 Yummy。 对于每个客户,约束列表将仅包括(至多)每种浇头一种口味。所以不会有顾客说她既喜欢辣又喜欢不辣的意大利腊肠。
如何编写执行此操作的过滤器?类似的东西
Pizza.objects.filter(flavor__??=list_of_flavor_constraints)
【问题讨论】: