2012-02-10 8 views
2

私のプロジェクトAPIで外部キー(この場合は2)を使用してオブジェクトを作成しようとすると、tastypieも関連オブジェクトを作成しようとします(ここでは&に参加してください) :django-tastypie POSTリクエストで関連オブジェクトを作成しよう

class ParticipationResource(ModelResource): 
    order = fields.ForeignKey(Order, 'order', full=True,) 
    participant = fields.ForeignKey(UserProfile, 'participant', full=True) 

    class Meta: 
     authorization = Authorization() 
     queryset = Participation.objects.all() 
     resource_name = 'participation' 
     fields = ['id', 'order', 'participant', 'products', 'created_at', 'modified_at'] 
     filtering = { 
      'participant': ALL 
     } 
     detail_allowed_methods = ['get', 'post', 'put', 'delete',] 
     always_return_data = True 

データが掲載さ:

{ 
    "order": { 
     "id":"1", 
     "resource_uri":"/api/v1/order/1/" 
     ... 
     }, 
    "participant":{ 
     "id":"1", 
     "resource_uri":"/api/v1/participant/1/" 
     ... 
     }, 
    "products":[] 
    } 

エラーメッセージを(NETWORK_IDがユーザープロファイルモデルの外部キーです):

"error_message": "app_user_profile.network_id may not be NULL", 

私はPOSTリクエストで完全なオブジェクトを送信していますが、resource_uriのみで試してみましたが、正常に動作しました。問題は、クライアント側のレンダリングに完全なオブジェクトが必要なことです(バックボーンとモデルは自動的にレンダリングされます)。どうすればいいですか? tastypieに関連オブジェクトを作成しないように指示する方法はありますか?

+0

あなたが求めているものはTastypieがフルネストされたオブジェクトを返すようにする方法です、あなたが戻ってPOSTを実行すると、入れ子オブジェクトの完全なJSONではなく、BackboneだけがPOSTをresource_uriにしますか? Backbone-TastypieまたはBackbone-Relationalを使用して、バックボーン側のネストされたオブジェクトを処理していますか?それともカスタムparse()関数がありますか? –

+0

私は、バックボーン側で自動的にネストされたオブジェクトをレンダリングするために完全なオブジェクトのみを使いたいと思っていますが、Tastypieは関連するオブジェクトを扱うことができず、resource_uriを与えないと新しいオブジェクトを作成できませんオブジェクト)。私は、Backbone-Tastypieとカスタムのparse()関数を使用します。 – djevg

+0

ForeignKey –

答えて

6

TastyPieをfull = Trueに設定すると、両方の方法で動作します。完全なネストされたオブジェクトを返しますが、完全なネストされたオブジェクトも受け入れます。

あなたがする必要があることは、ネストされたオブジェクトの完全なJSONではなく、resource_uriだけを送信しないようにバックボーンを設定することです。

これを行うにはいくつかの方法があります.1つは、構文解析とネストされたモデルの作成を担当するBackbone-Relationalを使用することです。カスタムパーズ()を行う必要はありません。

もう1つは、TastyPieでの作業を容易にするバックボーン・リレーショナル・コードのサブセットであるBackbone-Tastypie(同じ著者による)です。

しかし、あなたが持っているものに固執したい場合は、ネストされたオブジェクトの代わりにresource_uriを単に返すカスタムtoJSON関数を記述する必要があります。

これがそのままバックボーンモデルを保持しますが、そのシリアル化されたが、サーバに送信するとき、唯一のリソースのURIが使用されます。

{ 
    "order": "/api/v1/order/1/", 
    "participant":"/api/v1/participant/1/", 
    "products":[] 
    } 
+0

ありがとう、Tastypieの側でresource_uriを抽出しようとしましたが、Backboneでの動作の変更については考えていませんでした。私はバックボーン・リレーショナルを最初に試してみて、私が望むものを得ることができない場合はカスタムのtoSSON関数を書こうとします... – djevg

+0

私はdjango-pistonに無関係な理由で動いたので、もうこの問題はありません私はバックボーン・リレーショナルを採用しています(これは本当に役に立ちます)。再度、感謝します。 – djevg

関連する問題