39👍
Just hit the same wall, although I chose to ignore None
entries by excluding them out of the results. Guess you don’t want that.
BTW, this question has the same issue Annotating a Sum results in None rather than zero
As for the solution other than using a custom sql as pointed out in that question’s answer, you can use Django 1.8 instead and go for the solution pointed out in the ticket open in Django’s bug tracker for over 6 years(!) https://code.djangoproject.com/ticket/10929
Coalesce(Sum('field'), 0)
So your manager would be:
class LinkVoteCountManager(models.Manager):
def get_query_set(self):
return super(LinkVoteCountManager, self).get_query_set().annotate(
votes=Coalesce(Sum('vote__value'), 0)
).order_by(
'-rank_score',
'-votes'
)
PS: I have not tested the code, since I’m not using Django 1.8 myself.
9👍
You could also replace the line
netvotes = self.votes
to
netvotes = self.votes or 0
and you can now remove the if statement.
What this does as in many other languages is to return the non falsy value (None, 0, “”), or the last value, ‘0’ in this particular case.
- Django template tag: How to send next_page in {url auth_logout}?
- Django models across multiple projects/microservices. How to?
- How to have a link in label of a form field