【问题标题】:Django - exclude from queryset if every related model meets a conditionDjango - 如果每个相关模型都满足条件,则从查询集中排除
【发布时间】:2019-11-12 13:10:09
【问题描述】:

给定两个模型:

class Pizza(models.Model):
   ...


class Topping(models.Model):
    on_pizza = models.ForeignKey(Pizza, on_delete=models.CASCADE, related_name='toppings')
    name = models.CharField(max_length=50)
    spicy = models.BooleanField(default=False)

如何排除所有配料的“辣”设置为“假”的所有披萨?

所以,我想要一个比萨查询集,其中每个比萨至少有一个辣味配料。

谢谢!

【问题讨论】:

  • 由于已经发布了一些答案,我将对您的 Pizza-Topping 关系发表评论。您应该将其更改为ManyToManyField,这样您就可以将其与许多Pizzas 相关联,并避免为每个Pizza 重复Toppings。只需查看文档中的 this 示例即可。如果您将关系添加到Pizza 模型,它也会更有意义
  • 是的,你是对的。我只是选择了这个例子来说明我的问题,这不是我的生产代码:)

标签: django django-models django-orm


【解决方案1】:
Pizza.objects.filter(toppings__spicy=True).distinct()

【讨论】:

    【解决方案2】:

    也许

    Pizza.objects.filter(toppings__spicy=True).distinct()
    

    ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2022-10-24
      • 1970-01-01
      • 2021-12-26
      • 2017-04-16
      • 2015-10-13
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多