0

Tastypie を使用して、単一の POST 要求でレコードと複数の関連レコードを作成するにはどうすればよいですか?

たとえば、次の 2 つのリソースがあります。

class SongResource(ModelResource):
    playlists = fields.ToManyField('playlists.api.resources.PlaylistResource', 'playlist_set', related_name = "song", full=True)

    class Meta:
        queryset = Song.objects.all();
        resource_name = 'song'
        authorization = Authorization()


class PlaylistResource(ModelResource):
    song = fields.ToOneField(SongResource, 'song', full=True)

    class Meta:
        queryset = Playlist.objects.all()
        resource_name = 'playlist'
        authorization = Authorization()

次のようなデータ付きの投稿リクエストを使用して、新しいプレイリストとその曲を一度に作成したいと思います。

    var data = JSON.stringify({
        'name': 'My playlist.',
        'songs': [{'title': 'Song 1'}, {'title': 'Song 2'}, {'title': 'Song 3'}]
    });

それはうまくいきません。「'song' フィールドには、URI ではなく、辞書に似たものではなく、'pk' 属性を持たないデータが与えられた」と言われました。このように一気にレコードを挿入することは可能ですか、それともプレイリストと各曲に対して別々のリクエストを送信する必要がありますか?

4

2 に答える 2

1

非常にすばやくいじってみてください (そして、私は Tastypie に慣れていないので、これを一粒の塩で取ってください) - リソース内の obj_create() メソッドをオーバーライドすることでこれを行うことができると思います。このようなもの:

class SomeResource(ModelResource):
    class Meta:
        # yadda yadda

    def obj_create(self, bundle, request, **kwargs):
        print "hey we're in object create"
        # do something with bundle.data, this will have your songs in it
        return super(SomeResource, self).obj_create(bundle, request, **kwargs)
于 2012-07-11T22:22:17.267 に答える
0

You want to do something like this:

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"name":"playlist_name", "field2":"value2", "song": ["/api/v1/song/1/"]}' http://localhost:8000/api/v1/playlist/

Good luck!

于 2012-07-11T22:56:43.637 に答える