Это немного отличается от набора запросов фильтра Django __in для * каждого * элемента в списке и набора запросов фильтра Django __in для * каждого * элемента в списке (2.0) Учитывая следующеемодели:
class Product(BaseModel):
''' whatever '''
class Customer(BaseModel):
blacklist = models.ManyToManyField(Product, blank=True)
class Advisory(BaseModel):
product_names = models.ManyToManyField(Product)
Где клиент ведет список продуктов, которые ему не интересны. Как я могу получить список рекомендаций для данного клиента?
Допустим, у меня они есть вмоя БД:
# Advisory 1 (should be included as Product 1 isn't in the customers blacklist)
# product_names
# Product 1
# Product 2
# Product 3
# Advisory 2 (should be excluded)
# product_names
# Product 2
# Product 3
# Customer 1
# blacklist
# Product 2
# Product 3
# Product 4
# Product 5
Если я использую набор запросов, подобный этому:
queryset = Advisory.objects.all()
blacklist = Customer.blacklist.all()
queryset = queryset.exclude(product_names__in=blacklist).distinct()
Это исключит как рекомендации 1, так и рекомендации 2, поскольку продукты 2 и 3 присутствуют в черном списке клиентов