2

我正在使用 django sweetpie 将具有相关(ToOne)字段的模型发布到另一个模型资源。uri是: /api/map/?format=json

我想让客户端包含一个full_pagesurl 参数来获取完整的相关页面资源:/api/map/?full_pages=1&format=json

我不太了解关系字段文档,但我做了一个get_full可调用的:

def get_full(bundle):
    if bundle.request.GET.get('full_pages', 0):
        return True
    return False

我尝试将可调用对象传递给以下full参数ToOneField

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它永远不会被调用。

因此,我尝试FillableToOneField使用full属性创建自定义:

class FillableToOneField(fields.ToOneFIeld):
    full = get_full

class MapResource(ModelResource):
    page = FillableToOneField('pages.api.PageResource', 'page')

同样,get_full从不调用。

有没有更好、更简单的方法来做到这一点?

4

2 回答 2

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

于 2013-03-26T08:09:09.603 回答
0

在阅读了 Amyth 的答案django-boundaryservice 代码之后,我通过在相关PageResource上的方法中默认完整True并更改它来实现它: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 bundle
于 2013-03-26T14:14:27.403 回答