1

開発中の非常に小さなDjangoアプリケーションにTastypieを追加し始めています。リソースが存在するURIではなく、リレーションシップが指すリソースの数値IDだけを送信する方法があるかどうか疑問に思いました。

たとえば、ドキュメントで提供されている例の1つを使用します。

公開された「エントリ」リソースは次のようになります。

{
    "body": "Welcome to my blog!",
    "id": "1",
    "pub_date": "2011-05-20T00:46:38",
    "resource_uri": "/api/v1/entry/1/",
    "slug": "first-post",
    "title": "First Post",
    "user": "/api/v1/user/1/"
}

として表示される「ユーザー」との関係があります "user": "/api/v1/user/1/""user": 1次のように(可能であれば整数で)作成する方法はありますか?

{
    "body": "Welcome to my blog!",
    "id": "1",
    "pub_date": "2011-05-20T00:46:38",
    "resource_uri": "/api/v1/entry/1/",
    "slug": "first-post",
    "title": "First Post",
    "user": 1
}

私はアイデアやresource_uri属性全体を維持するのが好きですが、SQLリレーションシップのモデリングに関しては、ID(またはリレーションシップが「ToMany」の場合は数値IDのリスト)だけが必要です。これを行うためにクラスにdehydrate_userメソッドを追加するのは良い考えですか?EntryResourceそれはうまくいくようですが、おそらくそれを行うためのより一般的な方法があります(dehydrateすべての関係のためのメソッドを書く必要を避けるために)

前もって感謝します

4

1 に答える 1

6

水和脱水サイクルを使用して試すことができます

def dehydrate(self, bundle):
    bundle.data['entry'] = bundle.obj.entry.id
    return bundle

def hydrate(self, bundle):
    bundle.data['entry'] = Entry.objects.get(id=bundle.data['entry'])
    return bundle

ただし、リソースを直接アドレス指定できる方法であるため、URI の使用に固執することを強くお勧めします。ハイドレートとデハイドレートは、より複雑なリソースまたは仮想リソースに使用されます。

于 2012-11-16T15:34:47.990 に答える