8

Djangoプロジェクトでは、JSON応答を受信すると2つのオブジェクトを取得します

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

4

2 に答える 2

20

私見のより良いアプローチは、応答を行う前にフィールドをオーバーライド/データに追加するために作成された関数である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

このようにして、すべての呼び出しのすべての MIME タイプ/ステータス コードを上書きすることはなく、よりクリーンになります。

于 2013-04-30T15:54:44.027 に答える
4

これを行う 1 つの方法は、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)
于 2012-11-09T05:38:38.180 に答える