2017-05-17 12 views
22

私は1.11.1と私は私のテストを実行したときに、私はこれらのメッセージのトンを取得しています突然のすべてにはDjango 1.10.4からアップグレードDjangoのページネーションモジュールにそのバック: https://github.com/django/django/blob/master/django/core/paginator.py#L100PythonのDjangoの残りのフレームワークUnorderedObjectListWarning

私のクエリセットのコードに関連すると思わ:

return get_user_model().objects.filter(id=self.request.user.id) 

がどのように私はトンの詳細を見つけることができます彼の警告?私は、すべてのフィルタの最後にorder_by(id)を追加する必要があるようですが、どのコードにorder_byを追加する必要があるのか​​わかりません(警告はスタックトレースを返さないので、テスト走行)。

ありがとうございます!

編集:

@KlausDを使用してください。冗長先端が、私はこのエラーの原因とテストを見て:

response = self.client.get('/api/orders/')

これはOrderViewSetに行くが、シリアライザクラスのget_querysetで物事のどれもそれ原因と何がそれを引き起こしません。私は/ api/ordersを取得するために同じコードを使用する他のテストがありますが、それらは発生しません.... DRFはget_querysetの後に何をしますか?

https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166

私は改ページにトレースバックを入れた場合、私は残りのフレームワークが、順序の警告をトリガしている私のクエリのどのに戻って指して何をジャンゴに関連するものの全体の束を取得します。

+1

警告の原因となるテストの名前で簡単に見つけることができます。あなたは冗長でテストを実行したいかもしれません(ほとんどのテストランナーで '-v 2') –

+0

ありがとう@KlausD。それは役に立つリマインダーです。 –

+1

'' 'offset''と' '' limit'''を実行するクエリを探しますが、 '' 'order_by''はありません。 – gipsy

答えて

31

だからこの問題を解決するために、私はalloffsetfilter、およびlimit句をすべて検索し、それらにorder_by句を追加する必要がありました。デフォルトの順序追加することにより、固定いくつかのI:Djangoの残りのフレームワーク(アプリ/ apiviews.py)Iのためのビューセットで

class Meta: 
    ordering = ['-id'] 

は、デフォルトの順序が動作していないようでした追加などget_queryset方法の全てを更新する必要がありました。

これは他の人に役立つことを願っています。 :)私はobjects.all使用したときに、私は私は私のコードを変更し、この問題を解決するために、私のview.py中)(この警告

profile_list = Profile.objects.all() 
paginator = Paginator(profile_list, 25) 

を得ていた

6

:通常、それがあるべき

profile_list = Profile.objects.get_queryset().order_by('id') 
paginator = Paginator(profile_list, 25) 
+0

これはまた私のために働いた - ありがとう! – Steve

関連する問題