我的模板中有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 :(得分:1)
Django没有缓存原始查询集,所以当你第二次循环它时,Django会再次从数据库中提取原始对象。
解决方案是将原始查询集转换为列表。
objs = list(ObjsModel.objects.raw(sql_raw_query))
for obj in objs:
obj.id = base64.urlsafe_b64encode(str(obj.id))