Логика цикла Python Django: Ошибка говорит, что 'int' не повторяется - проверьте мой синтаксис? - PullRequest
0 голосов
/ 19 марта 2009
return sum(jobrecord.get_cost() or 0 
    for jobrecord in self.project.jobrecord_set.filter(
        date__lte=date,
        date__gte=self.start_date) or 0)

Ответы [ 2 ]

3 голосов
/ 19 марта 2009

После небольшого переписывания

query = self.project.jobrecord_set.filter(
        date__lte=date,
        date__gte=self.start_date)
values= ( jobrecord.get_cost() or 0 for jobrecord in query or 0 )
return sum( values )

Посмотрите внимательно на values= ( jobrecord.get_cost() or 0 for jobrecord in query or 0 )

Что происходит, когда запрос пуст?

Вы оцениваете jobrecord.get_cost() or 0 for jobrecord in 0

1 голос
/ 19 марта 2009

0 действительно не повторяется. Я думаю, что вы хотите отбросить это последнее or 0. когда запрос фильтра не соответствует ни одному элементу, он возвратит пустой запрос, а ваша сумма будет равна 0, поскольку sum([]) равно нулю.

Если есть какая-то причина, по которой запрос может вызвать исключение (недопустимые даты или что-то подобное), предложение or также не поймает это. [][1] or 0 все еще вызывает исключение.

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