Serialization 在序列化的django对象中返回计算字段?

Serialization 在序列化的django对象中返回计算字段?,serialization,django-models,Serialization,Django Models,我正在使用Django编写一个API,在返回未直接存储在数据库中的数据或在其他情况下以不同于数据库模式的方式组织的数据时遇到了一些问题 特别是,给定一个特定的数据请求,我想在序列化并返回它之前向模型中添加一个计算数据字段。但是,如果我只是将字段添加到模型中,内置序列化程序(我使用的是json)会忽略它,可能是因为它从模型定义中获取字段列表 我可以编写自己的序列化程序,但这太痛苦了。或者我想我可以运行model_to_dict,然后序列化dict而不是model。有谁有更好的主意吗 下面是代码目前

我正在使用Django编写一个API,在返回未直接存储在数据库中的数据或在其他情况下以不同于数据库模式的方式组织的数据时遇到了一些问题

特别是,给定一个特定的数据请求,我想在序列化并返回它之前向模型中添加一个计算数据字段。但是,如果我只是将字段添加到模型中,内置序列化程序(我使用的是json)会忽略它,可能是因为它从模型定义中获取字段列表

我可以编写自己的序列化程序,但这太痛苦了。或者我想我可以运行model_to_dict,然后序列化dict而不是model。有谁有更好的主意吗

下面是代码目前的大致情况:

squidlets = Squidlet.objects.filter(stuff)
for i in range(len(squidlets)):
    squidlets[i].newfield = do_some_computation(squid)
return HttpResponse(json_serializer.serialize(squidlets,ensure_ascii=False),
                    'text/json')

但是newfield不在返回的json中。

我认为应该使用简单的json进行序列化。。而且它不必是一个查询集。。。要将其转义为json,还需要使用marksafe


from django.utils.safestring import mark_safe
from django.utils import simplejson
simplejson.dumps(mark_safe(your_data_structure))



我用的是dict溶液,结果是相当干净的

下面是代码的样子:

from django.forms.models import model_to_dict

squiddicts = []
squidlets = Squidlet.objects.filter(stuff)
for i in range(len(squidlets)):
    squiddict = model_to_dict(squidlets[i])
    squiddict["newfield"] = do_some_computation(squidlets[i])
    squiddicts.append(squiddict)
return HttpResponse(simplejson.dumps(squiddicts,ensure_ascii=False),
                    'text/json')
这可能比必要的要详细一些,但我认为这样更清楚


这仍然让人感到有些不满意,但似乎效果很好。

这不起作用。如果您只是在对象上使用simplejson.dumps,它会抛出一个异常,因为Squidlet对象不可JSON序列化。如果您使用mark_safe(),由于我不太理解的原因,它会在序列化对象之前将对象内部的所有内容吹走。下面是simplejson.dumps(mark_safe())的外观:“[,”,下面是我的原始代码返回的内容:[{“pk”:1,“model”:“squid.squidlet”,“fields”:{“status”:“Active”,“group”:5,“contact_user”:2}]