我是Python / Django的新手,所以非常感谢任何帮助!
我试图根据score_1>的次数找出胜利者。所有子对象中得分为2.
我有这两个模型:
class Parent(models.Model):
winner = models.IntegerField(default=0)
def foo(self):
childs_of_me = self.child_set.all()
number_childs = childs_of_me.count()
one_better = childs_of_me.filter(score_1__gt=score_2)
one_wins_count = one_better.count()
if one_wins_count > number_childs/2:
self.winner = 1
class Child(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
score_1 = models.IntegerField(default=0)
score_2 = models.IntegerField(default=0)
我已按照此问题的答案(Select Children of an Object With ForeignKey in Django?)来获取Parent对象的子对象。但是,我似乎无法弄清楚如何根据子模型中的属性过滤返回的集合。
one_better = childs_of_me.filter(score_1__gt=score_2)
返回错误:全局变量score_2 unknown
我将如何做到这一点?
答案 0 :(得分:2)
您要做的是在查询集中引用另一个字段作为值。您可以通过构建F
-expression:
one_better = childs_of_me.filter(score_1__gt=F('score_2'))
如果不这样做,Python会将其解释为标识符。这里我们使用一个字符串,并将其包裹在F
- 对象周围,以表示我们想要引用一个字段。