Подтвердить что ты не робот

Есть ли "правильный" способ преобразования django.db.models.query.ValuesListQuerySet в чистый список?

Я пытаюсь удалить записи из нескольких моделей одним методом, если у меня есть следующая схема:

picture 1:1 picture_foreign_picture *:1 picture_foreign

Я удаляю эти данные в списке объектов picture_foreign:

picture_foreign_pictures = PictureForeignPicture.objects.filter(picture_foreign__in=picture_foreigns)
picture_ids = picture_foreign_pictures.values_list('picture_id', flat=True)
logger.warn('PICTURES REMOVE: %s' % picture_ids)
picture_foreign_pictures.delete()
logger.warn('PICTURES REMOVE: %s' % picture_ids)

В двух логических линиях выводятся следующие данные:

WARNING 2013-01-02 03:40:10,974 PICTURES REMOVE: [86L]
WARNING 2013-01-02 03:40:11,045 PICTURES REMOVE: []

Несмотря на это, изображение 86 все еще существует:

mysql> select id from picture where id = 86;
+----+
| id |
+----+
| 86 |
+----+
1 row in set (0.00 sec)

Я думаю, я мог бы обойти это, просто преобразовывая picture_ids в чистый целочисленный список, но мне интересно, есть ли еще метод Django? Я бы подумал, что flat=True уже справится с этим, но, похоже, это больше, чем просто чистый список.

4b9b3361

Ответ 1

Ну, я не уверен, что это правильно, но это смешно просто использовать list() для выполнения этого:

picture_ids = list(picture_foreign_pictures.values_list('picture_id', flat=True))

Ответ 2

Выше решение не работает:

Вы можете преобразовать в список pur следующим образом:

p_ids =PictureForeignPicture.objects.filter(picture_foreign__in=picture_foreigns).values_list('picture_id', flat=True)

new_list = [];new_list.extend(p_ids)