我試圖刪除在一個單一的方法從衆多的車型記錄,是我有以下模式:有沒有「正確的」方法將django.db.models.query.ValuesListQuerySet轉換爲純List?
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)
所述記錄器2條輸出線執行以下操作:
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
已經可以處理這個,但它似乎不僅僅是一個純粹的列表。
上述操作引發錯誤 – Arun
@Arun我得到了'***錯誤argument'錯誤,當我與PDB調試,因爲pdb覆蓋關鍵字'list'。在*真實世界*中,此解決方案有效。 –
它會觸摸數據庫進行轉換。這是一個問題,因爲如果ValueListQuerySet是另一個查詢的子查詢,它將在需要之前觸摸數據庫。 –