Django: как вернуть None, если какие-либо значения в аннотации набора запросов равны нулю - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу сделать аннотацию к набору запросов 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...