Фильтр модели без использования отдельного метода
У меня есть модель со списком товаров. Каждый товар имеет ID, цену, бренд и т.д. Я хочу вернуть все объекты модели, в которых имя бренда отличается. В настоящее время я использую встроенный в django SQLite, поэтому он не поддерживает что-то вроде
products = Product.objects.all().distinct('brand')
Есть ли другой способ вернуть все объекты, в которых название бренда отличается?
Попробовать Product.objects.order_by('brand').distinct('brand')
Когда вы указываете имена полей, вы должны предоставить order_by() в QuerySet, и поля в order_by() должны начинаться с полей в distinct(), в том же порядке. Refer
попробуйте это
products = set(Product.objects.values_list('brand'))
Что ж, вы можете сделать это двумя различными методами:
def MethodName(self):
query = """ SELECT DISTINCT brand FROM Product; """ self.execute(query)
- products = Product.objects.raw(""" SELECT DISTINCT brand FROM Product; """)
Пожалуйста, ответьте на это сообщение, если у вас возникли трудности с получением.
Поскольку SQLight не поддерживает .distinct('field')
, вам нужно сделать это непосредственно в python. Например:
products = list({p.brand: p for p in Product.objects.all()}.values())
Хорошо, попробуйте
distinctBrands = Product.objects.values('brand').annotate(count=Count('brand')).filter(count=1)
products = Products.objects.filter(
brand__in=distinctBrands
).all()