2017-01-03 2 views
-1

У меня есть Writer модель/таблица и модель статьи, как:Как получить строку с большим количеством внешних ключей в django?

class Writer(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    pic = models.URLField() 
    start_date = models.DateField('date of start', blank=True, null=True) 
    about = models.TextField(max_length=300) 

class Article(models.Model): 
    writer = models.ForeignKey(Writer) 
    name = models.CharField(max_length=100) 
    content = models.DecimalField(max_digits=10, decimal_places=2) 
    date = models.DateField(auto_now=False, auto_now_add=True) 

Одна статья может иметь только один писатель, но один автор может иметь много Articles.I может получить все писатель с

Writer.objects.all() 

Но я хочу, чтобы Писатель с большинством статей. Как я могу это сделать?

+2

'статьи = Writer.objects.annotate (NUM_ARTICLES = Count ('статья')) order_by ('- NUM_ARTICLES')' Читайте о функции агрегации [здесь] (https:. //docs.djangoproject .com/ы/1.10/разделы/дб/агрегация /) – latsha

ответ

3

Попробуйте следующее -

higest_count = Writer.objects.annotate(num_articles=Count('article')).order_by('-num_articles')[0].num_articles 
print(higest_count) #this will print highest count 
0

Возвращает целое число, представляющее количество объектов в базе данных , соответствующее QuerySet. Метод count() никогда не вызывает исключений.

Пример:

Возвращает общее ofentries номер в базе данных.

Entry.objects.count() 

Возвращает количество записей, чей заголовок содержит «Lennon»

Entry.objects.filter(headline__contains='Lennon').count() 

С помощью этого метода подсчета в виду, вы можете рассчитывать соответствующий набор Articles, делая Writer.article_set.count() и получите объект с самым высоким рейтингом articles