我正在使用django tastypie将一个带有相关(ToOne)字段的模型发布到另一个模型资源。uri是:/api/map/?format=json
我想让客户机包含一个获取完整相关页面资源的full_pages url参数:/api/map/?full_pages=1&format=json
我不太理解Relationship Fields docs,但我做了一个可调用的get_full:
def get_full(bundle):
if bundle.request.GET.get('full_pages', 0):
return True
return False我尝试将callable传递给ToOneField的full参数
from tastypie.contrib.gis import resources as gis_resources
class MapResource(gis_resources.ModelResource):
page = fields.ToOneField('pages.api.PageResource', 'page', full=get_full)但是当我检查pdb时,get_full从未被调用过。
因此,我尝试创建一个带有full属性的自定义FillableToOneField:
class FillableToOneField(fields.ToOneFIeld):
full = get_full
class MapResource(ModelResource):
page = FillableToOneField('pages.api.PageResource', 'page')同样,get_full永远不会被调用。
有没有更好、更简单的方法来做这件事?
发布于 2013-03-26 16:09:10
您可以简单地在dehydrate方法下实现这一点,如下所示。
class MapResource(ModelResource):
page = fields.ToOneField('pages.api.PageResource', 'page')
def dehydrate(self, bundle):
if bundle.request.Get.get('full_pages'):
self.page.full = True
return bundle并让他们以/api/map/?full_pages=True&format=json的身份发送请求
发布于 2013-03-26 22:14:27
在阅读了Amyth's answer和django-boundaryservice code之后,我通过将full默认设置为True并在相关PageResource的dehydrate方法中对其进行修改,使其正常工作:
class MapResource(gis_resources.ModelResource):
page = fields.ToOneField('pages.api.PageResource', 'page', full=True)pages.api:
class PageResource(ModelResource):
...
def dehydrate(self, bundle):
if not bundle.request.GET.get('full_pages'):
bundle = bundle.data['resource_uri']
return bundlehttps://stackoverflow.com/questions/15630506
复制相似问题