是否有一个“问题”;“适当的”;如何将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把我带到这里-你把我从兔子洞里救了出来。