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]