在Django项目中,当我收到JSON响应时,我得到两个对象
data.meta
和data.objects
这是我的资源
class MyResource(ModelResource):
def dehydrate(self, bundle):
bundle.data["absolute_url"] = bundle.obj.get_absolute_url()
bundle.data['myfields'] = MyDataFields
return bundle
class Meta:
queryset = MyData.objects.all()
resource_name = 'weather'
serializer = Serializer(formats=['json'])
ordering = MyDataFields
现在我想要json中的其他字段
data.myfields
但如果我按上述方式执行,那么该字段将添加到每个对象,如
data.objects.myfields
我该怎么做data.myfields
答案 0 :(得分:19)
更好的方法IMHO将使用alter_list_data_to_serialize,该函数在做出响应之前覆盖/添加字段到数据:
def alter_list_data_to_serialize(self, request, data):
data['meta']['current_time'] = datetime.strftime(datetime.utcnow(), "%Y/%m/%d")
return data
这样你就不会覆盖所有调用的所有mimetype / status代码,而且它更干净。
答案 1 :(得分:4)
实现此目的的一种方法是重写Tastypie ModelResource的get_list
方法。
import json
from django.http import HttpResponse
...
class MyResource(ModelResource):
...
def get_list(self, request, **kwargs):
resp = super(MyResource, self).get_list(request, **kwargs)
data = json.loads(resp.content)
data['myfields'] = MyDataFields
data = json.dumps(data)
return HttpResponse(data, content_type='application/json', status=200)