Django-Tastypie-MongoEngine,如何序列化数据 - 使用prepend_urls时创建响应方法

时间:2013-11-09 04:49:42

标签: mongodb python-2.7 mongoengine tastypie

我有以下资源,我正在尝试将一个网址添加到api并获取制造商资源的所有俱乐部。目前,我只是试图得到所有俱乐部的回复(注意我只是做了一个objects.all(),因为我此时只想要数据,我稍后会过滤它)。我的问题是,当我点击网址时,我确实得到了俱乐部,但是,它们不是json格式,结果如下:

"[<Club: Club object>, <Club: Club object>]"

我需要添加到create_response中,以便它返回json格式的对象以便可以使用它 - 基本上,它可以将对象吹掉而不是将它们保留为

"[<Club: Club object>]"

这是俱乐部的样子:

{
  "_id" : "5275b295fa57952e260243e5|Fairway|1",
  "manufacturer" : "Adams",
  "head_material" : null,
  "image_url" : "https://blah.com",
  "year" : "0",
  "name" : "Tight Lies GT Xtreme Offset",
  "url" : "http://blah.com"
}

这是资源:

class ManufacturerResource(resources.MongoEngineResource):
    class Meta:
        queryset = documents.Manufacturer.objects.all().order_by('id')
        allowed_methods = ('get')
        resource_name = 'manufacturers'
        include_resource_uri = False

    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/(?P<pk>[\w\d_.-]+)/drivers/$" % self._meta.resource_name, self.wrap_view('get_manufacturer_drivers'), name="api_get_manufacturer_drivers"),

    ]

    def get_manufacturer_drivers(self, request, **kwargs):
        drivers = documents.Club.objects.all().order_by('id')

        return self.create_response(request, drivers)

1 个答案:

答案 0 :(得分:0)

我在挖掘和挖掘后最终搞清楚这一点。我找不到任何内置的东西。我所做的是使用一些静态方法创建了一个HelperMethod类。这是我想出来的:

class HelperMethods:
    @staticmethod
    def obj_to_dict(object):
        return_data = {}
        for property, value in vars(object).iteritems():
            return_data[property] = value

        return return_data['_data']

    @staticmethod
    def obj_to_list(objects):
        return_data = []
        for object in objects:
            return_data.append(HelperMethods.obj_to_dict(object))
        return return_data

用法:

        return self.create_response(request, HelperMethods.obj_to_list(drivers))

希望这有助于某人。