Ответ 1
Ну, я не уверен, что это правильно, но это смешно просто использовать list()
для выполнения этого:
picture_ids = list(picture_foreign_pictures.values_list('picture_id', flat=True))
Я пытаюсь удалить записи из нескольких моделей одним методом, если у меня есть следующая схема:
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
уже справится с этим, но, похоже, это больше, чем просто чистый список.
Ну, я не уверен, что это правильно, но это смешно просто использовать list()
для выполнения этого:
picture_ids = list(picture_foreign_pictures.values_list('picture_id', flat=True))
Выше решение не работает:
Вы можете преобразовать в список pur следующим образом:
p_ids =PictureForeignPicture.objects.filter(picture_foreign__in=picture_foreigns).values_list('picture_id', flat=True)
new_list = [];new_list.extend(p_ids)