これらの値を持たないユーザーとの関連値の合計を加算したいと思います。Djangoクエリーセットの奇妙な動作
people_with_points = Person.objects.\
filter(answer__correct=True).\
annotate(points=Sum('answer__points')).\
values('pk', 'points')
<QuerySet [{'pk': 2, 'points': 190}, {'pk': 3, 'points': 150}]>
:私は一人一人のためのポイントの合計を達成することができ、以下のクエリでは
Person | Answer.Points
------ | ------
3 | 50
3 | 100
2 | 100
2 | 90
Person 4 has no answers and therefore, points
:
class Answer(models.Model):
person = models.ForeignKey(Person)
points = models.PositiveIntegerField(default=100)
correct = models.BooleanField(default=False)
class Person(models.Model):
# irrelevant model fields
サンプルデータセット:ここ
は私のモデル構造の簡易版ですしかし、一部の人々は関連するAnswer
のエントリがないかもしれないので、彼らはhav E 0点、私はそうのような「偽」そのポイントにCoalesce
を使用し、以下のクエリで:私はUNION演算子を使用し
people_without_points = Person.objects.\
exclude(pk__in=people_with_points.values_list('pk')).\
annotate(points=Coalesce(Sum('answer__points'), 0)).\
values('pk', 'points')
<QuerySet [{'pk': 4, 'points': 0}]>
意図したように、これらの作業のいずれもが、私は同じクエリセットでそれらを持っていると思います|
はそれらを結合する:
everyone = people_with_points | people_without_points
を今、問題のために:この後
、ポイントなしの人々が彼らのpoints
値はになってい代わりにを入力してください。
<QuerySet [{'pk': 2, 'points': 190}, {'pk': 3, 'points': 150}, {'pk': 4, 'points': None}]>
誰にもこのような現象が発生する理由はありますか?
ありがとうございます!