2

Django Tastypie を使用して、関連 (ToOne) フィールドを持つモデルを別のモデル リソースに公開しています。ウリは次のとおりです。 /api/map/?format=json

full_pages関連する完全なページ リソースを取得するために、クライアントに url パラメータを含めさせたいと考えています。/api/map/?full_pages=1&format=json

Relationship Fields docsをよく理解していませんが、get_fullcallable を作成しました:

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

fullの引数にcallable を渡そうとしました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's answerdjango-boundaryservice codeを読んだ後、デフォルトでフルに設定し、関連する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 に答える