是否有一个“问题”;“适当的”;如何将django.db.models.query.ValuesListQuerySet转换为纯列表?

是否有一个“问题”;“适当的”;如何将django.db.models.query.ValuesListQuerySet转换为纯列表?,django,django-models,Django,Django Models,我试图用一种方法从多个模型中删除记录,如果我有以下模式: picture 1:1 picture_foreign_picture *:1 picture_foreign 我正在删除这些给定列表中的图片\u异物: picture_foreign_pictures = PictureForeignPicture.objects.filter(picture_foreign__in=picture_foreigns) picture_ids = picture_foreign_pictures.va

我试图用一种方法从多个模型中删除记录,如果我有以下模式:

picture 1:1 picture_foreign_picture *:1 picture_foreign
我正在删除这些给定列表中的图片\u异物:

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\u id
转换成一个纯整数列表来解决这个问题,但是我想知道是否有一个更适合这个问题的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)

您使用的是什么python/django?我想我的解决方案是在Python2.7/Django 1.4上?上面的操作引发了一个错误:参数中的错误:@Arun我在调试pdb时得到了参数中的
***错误
错误,因为pdb覆盖了关键字
列表
。在现实世界中,这个解决方案是有效的。它将触碰数据库进行转换。这是一个问题,因为如果ValueListQuerySet是另一个查询的子查询,它将在需要之前触及数据库。谢谢@Leonardo.Z,pdb override把我带到这里-你把我从兔子洞里救了出来。