2012-04-11 11 views
4

私の現在のコードでは、ユーザーは彼が参加した目標のリストを持っています。私はAPIのエンドポイントにユーザーの結合されたすべての目標を公開したい。私は、このAPIエンドポイントに投稿、配置、取得できるようにしたいと考えています。結合された目標のリストを取得したり、結合された目標リストに目標を追加したり、結合された目標リストを更新したりします。manytomanyフィールドをtastypieのリソースとして公開するにはどうすればよいですか?

# Joined Goal Resource 
class JoinedGoalResource(ModelResource): 
    user = fields.ForeignKey(UserResource, 'user') 
    joined_goals = fields.ManyToManyField(GoalResource, 'joined_goals', full=True) 

    class Meta: 
    authentication = Authentication() 
    authorization = Authorization() 
    queryset = UserProfile.objects.all() 
    resource_name = 'joined_goal' 
    allowed_methods = ['get', 'post', 'put'] 
    filtering = { 
     'user': ALL_WITH_RELATIONS 
    } 

上記のコードの問題は、私はポストをすれば、得るので、それはそのクエリセットとしてのUserProfileモデルを使用して、またはAPIエンドポイントに置く、それはのUserProfileのではなく、ユーザーのjoined_goalsに影響を与えるということです。

編集: 結合されたリソースがobj_createメソッドをオーバーライドし、ログインしたユーザーの結合済みゴールリストに追加するようにコードを変更しました。問題は、このメソッドでバンドルを返す必要があることです。返すバンドルを作成するにはどうすればよいですか?

goal_resource = GoalResource 
goal_obj = goal_resource.obj_get(pk=1) 
goal_bundle = goal_resource.build_bundle(obj=goal_obj, request=request) 
return goal_bundle 

をしかし、PK = 1

答えて

1

ソリューションは、非常に単純なことができの引数に取ったときにobj_getは動作しません:私はこのような何かをしています。

"Creating per-user resources" section of Tastypie cookbookに従ってGETから返されたリストを絞り込み、新しく作成されたオブジェクトが現在のユーザー(POST)によって所有されていることを確認できます。

PUTに関しては、ユーザーが自分の目標を更新する権限しかないことを保証する認証クラスが必要です。これは、(ただし、ハード)、ちょうどgoalバンドルのuser属性の値は、メソッドがそうでなければPUT例外を発生させ、あなたがそう

:)終わっているのと同じrequest.userであることを確認してくださいトリッキーな部分です

GET,POST,PUT /api/users/ #for interaction with Users 
GET,POST,PUT /api/user-goals/ #for interaction with Goals 

を、あなたは(GETのために)導入する可能性:上記では、次のURIを持っていると思います

GET /api/users/goals/ #for displaying user goals in more natural way 

Nested Resources section of the cookbook

に従うことによって、 210
+0

このような質問がますます増えているので、「トリシアーな部分」についての解決策を見ていただければ幸いです(http://stackoverflow.com/questions/8613522/how-to-put-product- to-cart-via-tasytpie-api)[Q2] Q1は私の登録理由でした(http://stackoverflow.com/questions/10111734/tastypie-add-element-to-a-many-to-many-relationship) on stackoverflow :) – seb

+1

誰かが良い質問を投稿する必要があります。この質問は、オブジェクトを公開する方法とオブジェクトを操作する方法に関するもので、私はそれに答えたと思います。また、あなたが言及している部分をどのように実装するかについてのガイドラインも示しました。難しいことではなく、ModelResourceがどのように機能し、どのようなものを呼び出すのかを見るにはちょっとした努力が必要です。質問があれば、質問して、試したことを伝えてください。助けて。しかし、SOは "私のためのコードを書く"ことを意図していません。 – kgr

+0

そして、私は3ヶ月前にQ1のすべての点をフルフィルしたと思います。 – seb

関連する問題