【问题标题】:How to add extra object to tasty pie return json in python django如何在python django中向美味的派返回json添加额外的对象
【发布时间】:2012-11-09 04:46:00
【问题描述】:

在 Django 项目中,当我收到 JSON 响应时,我得到了两个对象

data.metadata.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

【问题讨论】:

    标签: python django tastypie


    【解决方案1】:

    恕我直言,更好的方法是使用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/状态代码,而且更简洁。

    【讨论】:

    • 谢谢!我用它从 GeoDjango 查询中添加边界框:data['extent'] = self._meta.queryset.extent()
    • 非常感谢,这为我节省了很多时间和精力!
    【解决方案2】:

    一种方法是覆盖 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)
    

    【讨论】:

    • 谢谢哥们,你又成功了
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2016-10-19
    • 1970-01-01
    • 2015-10-09
    • 2013-03-28
    相关资源
    最近更新 更多