我正在使用django tastypie将具有Related(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传递给full
的{{1}}参数:
ToOneField
但是当我用pdb检查时,永远不会调用from tastypie.contrib.gis import resources as gis_resources
class MapResource(gis_resources.ModelResource):
page = fields.ToOneField('pages.api.PageResource', 'page', full=get_full)
。
然后我尝试使用get_full
属性创建自定义FillableToOneField
:
full
同样,永远不会调用class FillableToOneField(fields.ToOneFIeld):
full = get_full
class MapResource(ModelResource):
page = FillableToOneField('pages.api.PageResource', 'page')
。
有更好,更简单的方法吗?
答案 0 :(得分:0)
您可以在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
答案 1 :(得分:0)
在阅读Amyth's answer和django-boundaryservice code后,我将此工作默认为True
,并在相关的dehydrate
方法中对其进行了修改 PageResource:
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 bundle