【问题标题】:Filtering a Django model using the related names of 2 M2M fields使用 2 个 M2M 字段的相关名称过滤 Django 模型
【发布时间】:2019-11-08 18:17:59
【问题描述】:

我的模型中有以下结构:

class Sauce(models.Model):
    ...

class Topping(models.Model):
    ...

class Pizza(models.Model):
    sauces = models.ManyToManyField(Sauce, related_name='pizzas')
    toppings = models.ManyToManyField(Topping, related_name='pizzas')

现在,假设我想查询所有给定配料和酱汁列表的比萨饼。例如:

sauces_ids = [2, 5, 7, 8]
toppings_ids = [1, 4, 5, 21]

使用 Django 的 ORM 进行查询的最有效方法是什么?感谢您的帮助。

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    假设这些是 pk/id 字段的值,您可以使用 __in 查找:

    Pizza.objects.filter(sauces__in=sauces_ids, toppings__in=toppings_ids)
    

    如果这些是其他字段的值,您还需要引用字段名称,例如字段名field:

    Pizza.objects.filter(sauces__field__in=sauces_ids, toppings__field__in=toppings_ids)
    

    【讨论】:

      【解决方案2】:
      Pizza.objects.filter(sauces__source_id__in=[2,5,6,8], toppings__topping_id__in=[1, 4, 5, 21])
      

      【讨论】:

        猜你喜欢
        • 2015-12-23
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 2021-04-18
        相关资源
        最近更新 更多