не могу добавить Model.objects.all () - PullRequest
0 голосов
/ 01 апреля 2010

Я не могу запустить ['abc'].append( MyModel.objects.all() ), поскольку он генерирует исключение 'NoneType' object is not iterable, если в MyModel нет записи.

любой обходной путь или что-то вроде ? : в c ++

редактирование: мое утверждение на самом деле

','.join([ str(e) for e in ['abc','def'].append( MyModel.objects.all() ) ])

похоже, что проблема вызвана append (), возвращающим NoneType. Я решил это, создав переменную для хранения списка, а затем extend() it

Ответы [ 5 ]

2 голосов
/ 01 апреля 2010

Лучше быть явным, чем неявным (и избегать использования свойств короткого замыкания or, которые могут привести к ошибкам:

my_objects = MyModel.objects.all()
if my_objects:
    [a,b,c].extend(my_objects)
2 голосов
/ 01 апреля 2010

как насчет:

['abc'].append( MyModel.objects.all() or [])
1 голос
/ 01 апреля 2010

Ничего не возвращается из метода добавления, которое происходит на месте. Другими словами, ваше утверждение эквивалентно

[str(e) for e in None]

, что, естественно, вызывает исключение NoneType. Решение состоит в том, чтобы иметь отдельный оператор для метода добавления или расширения, а затем следуйте советам Blokeley, чтобы быть явным.

1 голос
/ 01 апреля 2010

Model.objects.all() - это QuerySet , который повторяется (см. источник ). Передача итератора в list.extend работает просто отлично: содержимое итератора красиво разворачивается в конце списка.

Примечание: передача его в list.append помещает сам объект итератора в список, так что, скорее всего, вы захотите extend().

0 голосов
/ 01 апреля 2010

Разве это не должно быть + = вместо добавления?

...