2016-01-22 2 views
3

Допустим, у меня есть следующие модели:Джанго: граф объектов с одинаковым значением

class Book(models.Model): 
    name = models.CharField(max_length=70) 
    lang = models.CharField(max_length=70) 
    author = models.FK(Author) 


class Author(models.Model): 
    name = models.CharField(max_length=70) 

И я хочу, чтобы написать что-то, чтобы получить список авторов с аннотированный поле, которое показывает количество книг на каждом языке. Не могу себе представить аннотацию к ней :(, например, { 'ан': 10 'RU': 1 ... и т.д.}

например, просто подсчитывает все, Author.objects.annotate(languages=Count(book__lang))

+1

Посмотрите: https://docs.djangoproject.com/en/1.9/topics/db/aggregation/ для получения дополнительной информации о Aggregation/Annotation – Brandon

+0

Я думаю, что я смотрел там, но не нашел точной. idea :( –

ответ

4

Простой аннотаций должен помочь вам:

Book.objects.values('lang').annotate(lang=Count('author')).order_by('lang') 
+0

Есть ли способ сделать это без запроса запроса к списку? Например, если я все еще хочу его использовать? –

+0

Ну, предложение @suhain дало не cas t queryset to list, если вы выполните 'type (query_result)' в возвращаемом значении, вы увидите, что это такое. –

+0

да, правда. Он задает значение запроса. Это немного отличается. Например. У меня нет начальных qs, а также у меня есть больше предметов внутри, например. дополнительный пункт для региона) –

Смежные вопросы