У меня есть следующие модели в проекте Django:
class Category(models.Model):
title = models.CharField(max_length=255)
def __str__(self):
return '{} - {}'.format(self.pk, self.title)
class Item(models.Model):
title = models.CharField(max_length=255)
categories = models.ManyToManyField(Category)
def __str__(self):
return '{} - {}'.format(self.pk, self.title)
Я создал элемент и связал его с двумя категориями:
>>> item1 = Item.objects.get(pk=1)
>>> item1.categories.all()
<QuerySet [<Category: 1 - C1>, <Category: 4 - C4>]>
Я также могу использовать filter ()и получить ожидаемые результаты:
>>> Item.objects.filter(categories__title='C1')
<QuerySet [<Item: 1 - Item1>]>
Однако, когда я использую values () для того же набора запросов, будут возвращены только отфильтрованные отношения:
>>> Item.objects.filter(categories__title='C1').values('categories__title')
<QuerySet [{'categories__title': 'C1'}]>
по сравнению с:
>>> Item.objects.all().values('categories__title')
<QuerySet [{'categories__title': 'C1'}, {'categories__title': 'C4'}]>
Чего мне не хватает?Как я могу получить полный список категорий?