2017-01-26 90 views
0

我在我的模板中有OBJ,它的ID用於構建URL。我想base64的OBJ的ID。所以在我看來,我曾經這麼做過自定義查詢和修改數據

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不會緩存原始查詢集,因此當您第二次對其進行循環時,Django會再次從數據庫中提取原始對象。

解決方案是將原始查詢集轉換爲列表。

objs = list(ObjsModel.objects.raw(sql_raw_query)) 
for obj in objs: 
    obj.id = base64.urlsafe_b64encode(str(obj.id))