2017-05-02 1 views
1

django restフレームワークAPIViewでは、search filtersと同じメソッドを使用して順序付けフィールドを指定します。したがって、関連する名前を使用して順序付けを指定できます。名前を変更django rest frameworkのRelatedFieldオーダリングフィルタ

ordering_fields = ('username', 'email', 'profile__profession') 

ルートは次のようになります。私たちは、むしろAPIのモデル間の関係を表示し、代わりにprofile__professionprofessionを指定するために避けるだろうしかしhttps://example.com/route?ordering=profile__profession

。このようなことは、APIViewdef get_queryset(self):の並べ替えを実装しなくても達成できますか?たとえば、のdef get_queryset(self):で並べ替えを実装する必要はありませんか?

+0

私はあなたがDRFのフィルタバックエンドとしてdjango_filtersを使用してそれを行うことができると信じている - これはあなたのためのオプションである場合:http://django-filter.readthedocs.io/en/develop/ref/filters。 html#orderingfilter – opalczynski

答えて

1

def get_queryset(self)のマイナーチェンジで実現できます。

def get_queryset(self): 
    query = super(UserListView, self).get_queryset().annotate(profession=F('profile__profession')) 
    return query 
1

get_orderingを上書きし、ディクショナリを使用して完全なクエリーセット文字列に "短い名前"をマッピングすることによって、Django RESTフレームワークに基づく独自のOrderingFilterを作成する必要があります。

関連する問題