2012-11-09 9 views
7

W projekcie Django ja dostać dwa obiekty, kiedy otrzyma odpowiedź JSONJak dodać dodatkowy przedmiot do smacznego json powrotnej pie w python django

data.meta i data.objects

To mój zasób

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 

teraz chcę na inne pole w json jak

data.myfields

ale jeśli mogę zrobić powyższy sposób, wówczas pole jest dodawane do każdego obiektu jak

data.objects.myfields

jak mogę zrobić data.myfields

Odpowiedz

4

Jednym ze sposobów, aby to zrobić jest nadrzędnymi get_list metodę Tastypie ModelResource użytkownika.

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) 
+0

Dzięki, stary, znowu to zrobiłeś – user825904

18

lepszym podejściem IMHO byłoby użyć alter_list_data_to_serialize funkcja wykonana przesłonić/dodać pola do danych przed wykonaniem reakcji:

def alter_list_data_to_serialize(self, request, data): 
     data['meta']['current_time'] = datetime.strftime(datetime.utcnow(), "%Y/%m/%d") 
     return data 

ten sposób nie zastępują wszystkie MIME/kod statusu dla wszystkich połączeń i jest czystszy.

+1

Dzięki! Użyłem tego do dodania obwiedni z zapytania GeoDjango: 'data ['extent'] = self._meta.queryset.extent()' –

Powiązane problemy