我有三种型号(Django 1.6.5):
class Vote(models.Model):
voter = models.ForeignKey(UserSettings)
answer = models.ForeignKey(Answer)
rating = models.IntegerField()
class Answer(models.Model):
content = models.CharField(max_length=255)
class UserSettings(models.Model):
user = models.OneToOneField(User, related_name='settings')
weight = models.FloatField(default=1.0)
基本上,一个用户(投票者)可以通过给出评级来投票支持一个答案。我知道如何通过回答来计算评分:
^{pr2}$唯一微妙的是,每个选民都有自己的权重(所有选民都不平等!)我想把每个产品的额定值*重量相加。我知道(从here)这样的事情是可以做到的:
Sum('id',field="field1*field2")
如果我的两个字段在同一个模型中,它会很好地工作,但是如果它们不在同一个模型中就不起作用了。换句话说,命令:
Vote.objects.all().values('answer').annotate(score=Sum('id',field="rating*voter__weight"))
不起作用。非常感谢任何帮助!在
问题是我们需要与另一个表进行联接(在本例中是UserSettings),所以我们需要“强制”联接。在
为了强制连接,我使用了filter子句(事实上,我假设所有用户的权重都大于0),但它只是用于强制连接。然后可以使用“权重”字段。在
PD:我认为这个问题在最新版本的Django中通过条件表达式得到了解决:https://docs.djangoproject.com/es/1.10/ref/models/conditional-expressions/
相关问题 更多 >
编程相关推荐