2012-11-09 20 views
7

Trong dự án Django tôi nhận được hai đối tượng khi tôi nhận được phản hồi JSONLàm thế nào để bổ sung thêm đối tượng để ngon json bánh trở lại trong python django

data.metadata.objects

Đây là tài nguyên của tôi

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 

bây giờ tôi muốn các lĩnh vực khác trong json như

data.myfields

nhưng nếu tôi làm theo cách trên thì trường sẽ được thêm vào mỗi đối tượng như

data.objects.myfields

làm thế nào tôi có thể làm data.myfields

Trả lời

4

Một cách để làm điều này là bằng cách ghi đè phương pháp get_list Tastypie ModelResource của.

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

Cảm ơn bạn, bạn đã làm lại lần nữa – user825904

18

một cách tiếp cận IMHO tốt hơn sẽ được sử dụng alter_list_data_to_serialize, chức năng thực hiện để ghi đè/thêm các trường để các dữ liệu trước khi đưa ra câu trả lời:

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

Bằng cách này bạn không ghi đè tất cả các Mimetype/mã trạng thái cho tất cả các cuộc gọi và nó sạch hơn.

+1

Cảm ơn! Tôi đã sử dụng điều đó để thêm hộp giới hạn từ truy vấn GeoDjango: 'data ['extent'] = self._meta.queryset.extent()' –

Các vấn đề liên quan