在isBefore
中,我想要设置json结果名称。
我有一个我用它的类,但我可以设置名称。
tastypie
ode在这里返回此
enter cclass ContentResource(ModelResource):
class Meta:
results = ListField(attribute='results')
queryset = Content.objects.all()
resource_name = 'content'
max_limit = None
#filtering = {"title": "contains"}
def alter_list_data_to_serialize(self, request, data_dict):
if isinstance(data_dict, dict):
if 'meta' in data_dict:
# Get rid of the "meta".
del(data_dict['meta'])
# Rename the objects.
data_dict['Mobile'] = data_dict['objects']
del(data_dict['objects'])
return data_dict
当我使用{"Mobile":
[
{
"added": "2015-07-23T11:30:20.911835",
"content_cast": "",
"content_company": "HamrahCinema",
"content_description": "so nice",
"content_director": "",
"content_duration": "2:20",
"content_filelanguage": null,
}
]
}
时,每件事情都可以,但是当我使用/content/api/content
时,“mobile”就会被移除。
答案 0 :(得分:0)
作为有根据的猜测,我建议使用alter_detail_data_to_serialize
答案 1 :(得分:0)
当您请求资源列表时,您的请求将触发列表端点,因此存在meta
密钥。但是,如果您请求特定资源,则您的请求将使用有效的json对象触发详细信息。
对于有效的json列表,必须包含它的名称(即对象),而对于详细端点则不然。
您的详细信息请求无法正常工作,因为tastypie会为资源列表端点触发alter_list_data_to_serialize
,为详细端点触发alter_detail_list_data_to_serialize
。
如果您确实需要请求的名称,可以覆盖alter_detail_data_to_serialize
,如下所示:
def alter_detail_data_to_serialize(self, request, bundle):
return {"Mobile": [bundle.data]}
注意:alter_detail_data_to_serialize
返回一个带有列表中元素的json对象,(有点不常见的IMO)。