django tastypie:我如何控制RelatedField"丰满度"用url参数?

时间:2013-03-26 06:14:22

标签: django tastypie

我正在使用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')

有更好,更简单的方法吗?

2 个答案:

答案 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 answerdjango-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