2016-11-15 1 views
0

を入れて、PATCH:DjangoのRESTフレームワークPOSTのための外部キー項目をフィルタリングし、私はシンプルなModelSerializerを持って

class OfferViewSet(viewsets.ModelViewSet): 
    queryset = Offer.objects.all() 
    serializer_class = OfferSerializer 

外部キーitem_givenは、ユーザーに外部キーを持つItemという別のモデルです。

django restフレームワークで生成されたフォームでは、新しいオファーを作成するときにitem_givenフィールドの項目を選択できます。しかし、私は、外部キーユーザーがrequest.userと等しい項目だけを選択できるようにしたいと思います。

シリアライザでdef_querysetを編集しようとしましたが、成功しませんでした。 これをどのように達成できますか?

私はアイテムを作成していないアカウントを持っていますが、すべてのアイテムを取得しています。

https://i.stack.imgur.com/bVfxo.png

は現在、私は、ID 3

{ 
    id: 1, 
    name: "asasd", 
    description: "sdffsd", 
    price_min: 123, 
    price_max: 234, 
    creation_date: "2016-11-15T17:35:11Z", 
    archived: false, 
    owner: 1, 
    category: 1, 
    image_set: [ ] 
}, 
{ 
    id: 2, 
    name: "sdfsdffiss", 
    description: "fsdfsd", 
    price_min: 124, 
    price_max: 1245, 
    creation_date: "2016-11-15T19:39:02.225543Z", 
    archived: false, 
    owner: 1, 
    category: 1, 
    image_set: [ ] 
}, 
{ 
    id: 8, 
    name: "Test", 
    description: "Test", 
    price_min: 123, 
    price_max: 234, 
    creation_date: "2016-11-15T20:42:34.492041Z", 
    archived: false, 
    owner: 3, 
    category: 1, 
    image_set: [ 
     5 
    ] 
} 

でユーザーにログインしていると私は、新しいオファーを作成するために行くとき、ひとつひとつのアイテムはitem_givenフィールドに表示

答えて

1

get_querysetを意味し、それはシリアライザメソッドではなく、ビューセットメソッドです。私はすべての項目を表示するフォームを解決することができませんでした

class OfferViewSet(viewsets.ModelViewSet): 
    serializer_class = OfferSerializer 

    def get_queryset(self): 
     return Offer.objects.filter(item_given__owner=self.request.user) 
+0

Iによって所有されていない場合、私はそれがエラーを上げる作ることができます:このように、あなたのようなものがあるでしょうitem_given__user "の代わりに" item_given__owner "を書きましたが、その理由は、外部キーがItemモデルのownerという名前になっていますが、リスト内のすべての項目を取得しているからです。ドロップダウンリストを示す画像を追加しました。 – Servietsky

+0

追加した画像は壊れています。それにもかかわらず、返されたオファーをデバッグして、実際に 'item_given.owner'に別のユーザがいるかどうか確認できますか?実際にそうであれば私の唯一の推測は間違ったビューに当たっているか、あるいは他の奇妙な理由のために 'get_queryset'が実行されていないということです。 – lucasnadalutti

+0

私はアイテムの出力を追加しました。 'get_queryset'が実行されない原因は何ですか? – Servietsky

0

が、アイテムは、ユーザー

def validate(self, data): 
    if self.context['request'].user.userprofile != data['item_given'].owner: 
     raise serializers.ValidationError("Item given is not owned by the current user") 
    return data 
関連する問題