Сортировка по пользовательским upvotes и downvotes не работает должным образом
В настоящее время у меня есть такая модель
class IpAddress(models.Model):
creado = models.DateTimeField(auto_now_add=True)
ip_address = models.GenericIPAddressField(unique=True)
class Palabra(models.Model):
nombre = models.CharField(max_length=250)
definicion = models.CharField(max_length=1000, unique=True)
ejemplo = models.CharField(max_length=250)
creado = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True, blank=True)
anonimo = models.BooleanField(default=True)
aprobada = models.BooleanField(default=False)
userUpVotes = models.ManyToManyField(IpAddress, blank=True, related_name='threadUpVotes')
userDownVotes = models.ManyToManyField(IpAddress, blank=True, related_name='threadDownVotes')
gramatica = models.CharField(max_length=250, null=True, blank=True)
pais = models.CharField(max_length=250, null=True, blank=True)
А мои функции ранжирования таковы
defeniciones = Palabra.objects.prefetch_related(
'tag_set'
).filter(
nombre__iexact=palabra,
aprobada=True
).annotate(
total_votes=Count('userUpVotes') / NullIf((Count('userUpVotes') + Count('userDownVotes')), 0)).order_by('-total_votes')
У меня есть ситуация, когда слово имеет два upvotes и ни одного downvotes. Но слово, у которого нет ни upvotes, ни downvotes, занимает более высокое место.
Я использую NullIf
из-за postgres.