Это немного отличается от Django filter queryset __in для *каждого* элемент в списке и Django filter набор запросов __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 присутствуют в черном списке клиентов.
product
, которого нет вblacklist
? - person Willem Van Onsem   schedule 22.05.2018NOT IN
, которого явно не хватает в Django..exclude
на самом деле не равноNOT IN
, так как это означаетNOT IN
для всего отношения. - person Willem Van Onsem   schedule 22.05.2018