使用这个模型:
class Vine(models.Model):
autor = models.ForeignKey(Viner,related_name='autor')
titulo = models.CharField(max_length=450)
estado = models.CharField(choices=ESTADOS_VINE, max_length=30)
objects = models.Manager()
custom_object = managers.VineManager()
和投票的模型
class Voto(models.Model):
user = models.ForeignKey(MyUser)
submit_date = models.DateTimeField(auto_now_add=True)
vine = models.ForeignKey(Vine)
valoracion = models.BooleanField(default=False)
和收藏夹的类(这个工作正常)
class Favorito(models.Model):
date = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='favoritos')
我有这个'查询'在Django。
vines = Vine.custom_object.filter(estado=2).\
annotate(favoritosCount=Count('favoritos', distinct=True)).\
filter(voto__valoracion=False).annotate(disLikesCount=Count('voto', distinct=True))\
.annotate(likesCount=Count('voto', distinct=True)).filter(voto__valoracion=True)
但第二个过滤器由于第一个过滤器无效。
基本上我想要的是得到正面投票的总和' - '反对票'作为一个领域和秩序。
有人可以帮助我吗?
提前谢谢
答案 0 :(得分:0)
AFAIK您无法使用ORM进行查询。您可以使用a raw query进行此操作。
我认为如果您将计数字段添加到Vine模型并按顺序排序会更容易。然后每次有新的Voto时更新该计数字段。
这样的事情:
from django.db.models import F
class Vine(models.Model):
...
votos = models.IntegerField()
class Meta:
ordering = ('votos',)
class Voto(models.Model):
...
def save(self):
"""When saving new Voto instance, update related Vine."""
if not self.pk:
new_vote = 1 if self.valoracion else -1
self.vine.update(votos=F('votos') + new_vote)
return super(Voto, self).save()
PS:如果您想了解更多关于F expression的信息。