2017-12-22 7 views
0

DRFブラウズ可能なAPIでは、どのフィールドにデータが入力されるのを制限する方法がありますか(ドロップダウンセレクタやリストセレクタなど)django restブラウズ可能なAPIのドロップダウンでの制限の選択

以下は、DRFがユーザーに選択すべき "プロジェクト"の選択肢を提案するイメージ例です。ただし、ログインしているユーザーはこれらのプロジェクトにアクセスする場合とアクセスしない場合がありますので、ここに表示される内容を制御したいと考えています。デフォルトの動作は、関連するすべてのオブジェクトを表示することです。

enter image description here

get_queryset()機能に応じて設定されるように、これらのフィールドに移入オブジェクトをリンクする方法があった場合、それは本当に有用であろう。

このページではそれが可能かもしれないとほのめかしているようだ、私はちょうどそれを行う方法の例を見つけることができません:http://www.django-rest-framework.org/api-guide/filtering/

答えて

0

私は完全にあなたが何をしたいかを理解するが、クエリセットフィルタの__in機能を試していませんあなたが唯一の正確な値を示すために必要がある場合:

class PurchaseList(generics.ListAPIView): 
    serializer_class = PurchaseSerializer 

    def get_queryset(self): 
     """ 
     Optionally restricts the returned purchases to a given user, 
     by filtering against a `username` query parameter in the URL. 
     """ 
     to_show = [ "user1", "user2", "user3"] 
     queryset = Purchase.objects.all() 
     username = self.request.query_params.get('username', None) 
     if username is not None: 
      queryset = queryset.filter(purchaser__username__in=username) 
     return queryset 

を、あなたはリストをto_showためにあなたの値を追加することができますし、クエリセットの要素は、それらの1に等しい場合、それが表示されます。 あなたは、モデルの唯一のいくつかのフィールドを表示したい場合にも、あなたのシリアライザのfieldsパラメータを編集する必要があります。

class PurchaseList(serializers.ModelSerializer): 
    class Meta: 
     model = Purchase 
     fields = ('id', 'field1', 'field2', ...) 
+0

だから、正しくフィルタリングを行うだろうが、実際にListAPIViewことを使用するように閲覧可能なAPIを伝える方法がありますそれはドロップダウンまたはリストセレクターのための "提案された選択肢"を埋めるために行くとき?私は写真で質問を更新し、私が見ていることを示しています – CM0491

関連する問題