How to add data to tastypie resources in regular django views
As is often the case, writing this up helped me find a temporary solution. Maybe someone will have some input on how to make this better.
I am using this to prepare a queryset for serialization:
def serialize_queryset(resource_class, queryset): # hand me a queryset, i give you dehydrated resources resource = resource_class() dd = {} # make meta dd['meta'] = {} dd['meta']['limit'] = 1000 dd['meta']['next'] = None dd['meta']['offset'] = 0 dd['meta']['previous'] = None dd['meta']['total_count'] = len(queryset) # objects dd['objects'] = [] for obj in queryset: bundle = resource.build_bundle(obj=obj) dehydrated_obj = resource.full_dehydrate(bundle) dd['objects'].append(dehydrated_obj) # return dict return dd
And I use the Serializer from tastypie.serializer. and in using it in a sample view is goes something like:
from tastypie.serializer import Serializerserializer = Serializer()def my_view(request): #... do some other view stuff ... # prepare a queryset for serialization queryset = MyModel.objects.filter(is_cool=True) data = serialize_queryset(MyModel, queryset) # add in custom stuff, determined earlier in the view somewhere data['success'] = success data['message'] = message data['error'] = error # serialize and return response data = serializer.serialize(data) return HttpResponse(data, mimetype='application/json')
This seems to work. Maybe you see something bad about this method, or a way to improve it?