Django фильтрует объекты по двум полям [дубликат]

У меня есть модель Django, которая выглядит следующим образом

class Product(models.Model):
    product_type_id = models.IntegerField()
    product_sub_id = models.IntegerField()
    ...

Где продукт может быть определен как

name product_type_id product_sub_id
toy cars 13 8
toy planes 13 11
cheese 2 1
bread 2 4
chocolate cake 2 8

Имея список (product_type_id, product_sub_id), есть ли простой способ отфильтровать товары, а не вытаскивать все совпадающие объекты и сравнивать их со списком после этого?

Например, у меня есть [(13, 8), (2, 1)] для получения продукта "игрушечные машинки" и "сыр"

Мое текущее решение таково

my_list = [(13, 8), (2, 1)]

filtered_products = Products.objects.filter(
    product_type_id__in = [i[0] for i in my_list],
    product_sub_id__in = [i[1] for i in my_list]
)

# filtered_products contains chocolate cake which I don't want
# so have to do another compare
matching_products = [p for p in filtered_products if (p.product_type_id, product_sub_id) in my_list]
Вернуться на верх