doniyor
doniyor

Reputation: 37934

Django Count() multiple fields and sort by their sum

I have a model named Topiccenter. and there are many entries in each Topiccenter.

class Topiccenter(models.Model):
  name = models.TextField()

class Book(models.Model):
  tc = models.ForeignKey(Topiccenter,related_name="tc_book_entries")
  name = models.TextField()

class Journal(models.Model):
  tc = models.ForeignKey(Topiccenter,related_name="tc_journal_entries")
  name = models.TextField()

I want to get topiccenters and sort them by max entries and min entries.

I tried

Topiccenter.objects.annotate(sum_entries=Sum('tc_book_entries','tc_journal_entries')).order_by('-sum_entries')

but this is not working

Upvotes: 1

Views: 576

Answers (1)

Bibhas Debnath
Bibhas Debnath

Reputation: 14939

Try this -

Topiccenter.objects.annotate(
    sum_books=Sum('tc_book_entries'),
    sum_journals=Sum('tc_journal_entries')
).extra({
    'select': {
        'sum_entries': 'sum_books + sum_journals'
    }
}).order_by('-sum_entries')

This should work.

Upvotes: 3

Related Questions