Фильтрация модели Django с использованием связанных имен 2 полей M2M - PullRequest
1 голос
/ 08 ноября 2019

У меня есть следующая структура в моих моделях:

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]

Какой самый эффективный способ запросить это с помощью ORM Джанго? Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Предполагая, что это значения поля 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)
1 голос
/ 08 ноября 2019
Pizza.objects.filter(sauces__source_id__in=[2,5,6,8], toppings__topping_id__in=[1, 4, 5, 21])
...