13

次のスキーマがある場合、単一のメソッドで多数のモデルからレコードを削除しようとしています:

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 つの loggers 行は次を出力します。

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いましたが、単なるリスト以上のもののようです。

4

2 に答える 2

28

まあ、それが適切かどうかはわかりませんが、これlist()を達成するために使用するのは途方もなく簡単です:

picture_ids = list(picture_foreign_pictures.values_list('picture_id', flat=True))
于 2013-01-02T04:11:13.597 に答える
5

上記の解決策が機能していません:

次のように pur リストに変換できます。

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

new_list = [];new_list.extend(p_ids)
于 2014-04-10T12:11:18.703 に答える