在tastypie中,我如何为json结果设置名称

时间:2015-08-03 20:47:23

标签: django tastypie

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”就会被移除。

2 个答案:

答案 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)。