【问题标题】:django tastypie: how do I control RelatedField "fullness" with url parameter?django tastepie:如何使用 url 参数控制相关字段“丰满度”?
【发布时间】:2013-03-26 06:14:22
【问题描述】:

我正在使用 django sweetpie 将具有相关(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

我尝试将可调用对象传递给ToOneFieldfull 参数:

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

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

【问题讨论】:

    标签: django tastypie


    【解决方案1】:

    在阅读了Amyth's answerdjango-boundaryservice code 之后,我通过默认为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 bundle
    

    【讨论】:

    • 是的,但阻止full 的部分目的是限制数据库查询的速度。我相信如果使用此方法,full 数据库查询 仍将执行。正确的数据将被返回,但 Tastypie 仍会做所有工作以获取相关对象(这需要时间),然后这些对象将从数据中删除。
    【解决方案2】:

    您可以在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 发送请求

    【讨论】:

    • 似乎不起作用 - GET 参数对页面完整属性没有影响。 :(
    • @groovecoder 我在发布之前确实对此进行了测试。你有什么错误吗?
    • 没有错误;如果这有什么不同,我实际上正在扩展tastepie.contrib.gis.resources.ModelResource?好像相关领域的“丰满度”在脱水之前就已经确定了?
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2018-12-16
    • 2015-08-27
    • 1970-01-01
    • 2012-07-31
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多