2017-01-26 3 views
0

テンプレートにOBJがあり、そのIDを使用してURLを構築しています。私はOBJのIDをbase64にしたい。だから私の見解では私はそれをしていましたカスタムクエリとデータの変更

objs = ObjsModel.objects.filter(blabla) 
for obj in objs: 
    obj.id = base64.urlsafe_b64encode(str(obj.id)) 

このコードは動作します。残念ながら、私はクエリにRAW SQLを使用する必要があります。 RAWクエリを使用すると、ループはIDを変更していません

sql_raw_query = "SELECT * FROM blabla more blabla" 
objs = ObjsModel.objects.raw(sql_raw_query) 
for obj in objs: 
    obj.id = base64.urlsafe_b64encode(str(obj.id)) 

このコードではIDは変更されず、なぜ私は理解できません。ビューからIDを変更する方法は?

+0

あなたの 'objs'コレクションは空ではありませんか? – afilardo

+0

はい、私はすべてが唯一のことは、IDがコード化されていないということです – user43506

答えて

1

Djangoは未処理のクエリーセットをキャッシュしないので、2回目にループすると、Djangoは再び元のオブジェクトをデータベースからフェッチします。

解決策は、未処理クエリーセットをリストに変換することです。

objs = list(ObjsModel.objects.raw(sql_raw_query)) 
for obj in objs: 
    obj.id = base64.urlsafe_b64encode(str(obj.id)) 
関連する問題