Я хочу сделать аннотацию к набору запросов Django.Если какое-либо из значений равно NULL, возвращаемое значение должно быть None.
Я всегда думал, что это значение по умолчанию, но, похоже, это не так.См. Пример ниже:
class Team(models.Model):
name = models.CharField(max_length=10)
def __str__(self):
return self.name
class Player(models.Model):
score = models.FloatField(null=True)
team = models.ForeignKey(Team, on_delete=models.PROTECT)
n = Team.objects.create(name='north')
s = Team.objects.create(name='south')
Player.objects.create(team=n, score=10)
Player.objects.create(team=s, score=20)
Player.objects.create(team=s)
qs = Team.objects.all().annotate(total=Sum('player__score'))
for t in qs:
print(t, t.total)
>>> north 10 # This is expected
>>> south 20 # This should give None, because the third player doesn't have a score
Как получить желаемое поведение в расчете?
Я использую Django 1.11.18 с Postgres