[解決済み] Python Django Rest Framework UnorderedObjectListWarning
質問
Django 1.10.4 から 1.11.1 にアップグレードしたら、突然、テストを実行するときにこれらのメッセージが大量に表示されるようになりました。
lib/python3.5/site-packages/rest_framework/pagination.py:208:
UnorderedObjectListWarning:
Pagination may yield inconsistent results with an unordered object_list:
<QuerySet [<Group: Requester>]>
paginator = self.django_paginator_class(queryset, page_size)
Django Pagination モジュールに辿り着きました。 https://github.com/django/django/blob/master/django/core/paginator.py#L100
私のクエリセットのコードと関係があるようです。
return get_user_model().objects.filter(id=self.request.user.id)
この警告の詳細を知るにはどうしたらよいでしょうか。 どうやら、この警告には
order_by(id)
を追加する必要があるようですが、どのコードがorder_byを追加する必要があるのか見つけることができません(警告はスタックトレースを返さないため、テスト実行中にランダムに発生します)。
ありがとうございます!
編集します。
というわけで、@KlausD.verbosity tip を使って、このエラーを引き起こしているテストを見てみました。
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
pagination にトレースバックを置くと、django rest framework に関連するものがたくさん出てきますが、どのクエリが順序の警告をトリガーしているかを示すものは何もありません。
どのように解決するのですか?
これを解決するために、私はすべての
all
,
offset
,
filter
そして
limit
節を追加し
order_by
節を追加しました。 いくつかは、デフォルトの順序を追加することで修正しました。
class Meta:
ordering = ['-id']
ViewSets for Django Rest Framework (app/apiviews.py) の中で、私はすべての
get_queryset
メソッドを更新する必要がありました。
これが誰かの助けになることを願っています :)
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] virtualenvsはどこに作成するのですか?