6

Tastypieを使用して新しいアイテムを作成するときに、多対多のフィールドであるユーザーの属性にアイテムを追加できるようにしたいと思います。これで、私のobj_createは次のようになります。

  def obj_create(self, bundle, request=None, **kwargs):
    return super(GoalResource, self).obj_create(bundle, request, user=request.user)

新しいオブジェクトを作成したいのですが、それをrequest.userの属性goal_listに追加できるようにしたい場合。しかし、私が持っているものはすぐにデータベースにオブジェクトを作成します。オブジェクトを作成して、それをユーザーのgoal_list属性に追加するにはどうすればよいですか?

4

2 に答える 2

10

リソース定義を表示しませんでしたがtastypie.resources.ModelResource、基本クラスとして使用していると仮定すると、これは機能するはずです。

def obj_create(self, bundle, request=None, **kwargs):
    bundle = super(GoalResource, self).obj_create(
        bundle, request, user=request.user)

    user = request.user
    user.goals.add( bundle.obj )
    user.save()
    return bundle

これは、クラスのobj_createメソッドがModelResource保存されたオブジェクト()を含むバンドルを返し、図のようにメソッドbundle.objでこのオブジェクトを操作してobj_createから返すことができるためです。

また、request.userに有効なオブジェクトが含まれている(つまり認証されている)と仮定Userしました。上記が機能することを確認する必要があります。そうでない場合は、エラー処理コードを追加する必要があります。

お役に立てれば :)

于 2012-04-09T08:29:07.893 に答える
6

まだコメントするほどの評判がないので、2番目の答えを出すことにしました。上記の答えは正しいです。その要求が obj_create 呼び出しに存在しなくなったことを追加したかっただけです。bundle.request 経由で現在のリクエストにアクセスできます。

http://django-tastypie.readthedocs.org/en/latest/resources.html#accessing-the-current-request

上記の回答をありがとう、それも私を助けました!

于 2014-02-11T19:30:44.963 に答える