Фильтр модели без использования отдельного метода

У меня есть модель со списком товаров. Каждый товар имеет 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'))

Что ж, вы можете сделать это двумя различными методами:

  1. def MethodName(self):

    query = """
         SELECT DISTINCT brand FROM Product;
         """
    self.execute(query)
    
    1. 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()
Вернуться на верх