I have models:
class Topiccenter(models.Model):
name = models.TextField()
def sumentries(self):
return self.tc_books.count() + self.tc_journals.count()
class Book(models.Model):
name = models.TextField()
tc = models.ForeignKey(Topiccenter,related_name="tc_books")
class Journal(models.Model):
name = models.TextField()
tc = models.ForeignKey(Topiccenter,related_name="tc_journals")
I am trying to do something like this:
Topiccenter.objects.annotate(tc_books=Sum('tc_books'),
journals=Sum('tc_journals')
).extra(
select={'sum_entries':'tc_books+journals'},
order_by=('sum_entries',)
)
but it is saying: The annotation 'tc_books' conflicts with a field on the model.
The problem is that tc_books
is also the related name for your books. Also, you're trying to use Sum
on a non-numerical value. You should use Count
instead. Try this:
Topiccenter.objects.annotate(num_books=Count('tc_books'),
num_journals=Count('tc_journals')
).extra(
select={'sum_entries':'num_books+num_journals'},
order_by=('sum_entries',)
)