自定义查询和更改数据

时间:2017-01-26 12:55:03

标签: django django-templates django-views

我的模板中有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?

1 个答案:

答案 0 :(得分:1)

Django没有缓存原始查询集,所以当你第二次循环它时,Django会再次从数据库中提取原始对象。

解决方案是将原始查询集转换为列表。

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