特定のエラーメッセージは次のとおりです。django.db.utils.NotSupportedError:フィールドON DISTINCTこのデータベースのバックエンドでサポートされていません
ただ、再クエリに行うには明確な方法を使用して、重いmysqlデータベースの検索に遭遇し、その結果は、このエラーが発生しました。明確なソースを見てください:
1 デフ明確な(自己、* FIELD_NAMES): 2 「」「 3 。リターンだけ明確な結果を選択する新しいクエリセットのインスタンス 4 『』」 5 アサートself.query.can_filter()、\ 6は 、「一度明確なフィールドを作成できませんスライスが取られている。」 7 OBJ = self._chain() 8 obj.query.add_distinct_fields(* FIELD_NAMES) 9 リターン OBJを
明確なリターンにクエリの新しいセットを使用し、それは重量の目的を達成するために、再現性のある結果が表示されません。私たちは、それが1つまたは複数のFIELD_NAMESパラメータ、つまり、各フィールド名に許容可能であることがわかります。
私は間違った文言を書いた:u.objects.all()DISTINCT( 'アドレス')。 。
これは間違ってのレポートです。。。現在のデータベースをサポートしていない明確な説明に表示される指示に従います。
:私たちは、このフィールドQuguanネットワーク記述を見ることができますhttps://docs.djangoproject.com/en/2.2/ref/models/querysets/#distinct
上記のこの誤った文言と呼ば公式ウェブサイトは、MySQLのは、指定することはできません明確な()フィールドでのサポートにpostgresqlを、サポートされていません。
エラー解決
これを行うことはできません、我々は中に入るのが好きではないデータ値またはvalues_listを書くことができます。
クエリは次のよう:
u.objects.filter(USER_ID = 1).values(' アドレス'、" signer_name "、' signer_mobile ').distinct()
出力:
<クエリセットその[{ ' アドレス':' 188号ブルー国際ビル'、' signer_name ':' ADMIN '、' signer_mobile ':' 1888888888 ' }、{ ' アドレス':' プレインズロード188 '、' signer_name ':' 牛' ' signer_mobile ':' 2222222222 ' }、{ 'アドレス":' 南門通り、14 '、' signer_name ':' 劉Yuchen '、' signer_mobile ':' 3333333333 ' }、{ ' アドレス':' 廬山南路、山麓の扉'、' signer_name ':' 湖南大学'、' signer_mobile ':' 888888888 ' }、{ ' アドレス':'安徽Jinzhai号線96 '、' Signer_name ':' 中国科学技術大学'、' signer_mobile ':' 666 666 666 ' }]>
SQLステートメントに対応します:
1 SELECT DISTINCTアドレス、signer_name、signer_mobile FROM user_operation_useraddress WHERE USER_ID = 1 ; // の再照会 2 3 SELECT COUNT(*)繰り返しAS、アドレス、signer_name、signer_mobile FROM user_operation_useraddress GROUP BYアドレス、signer_name、signer_mobile; // 重複排除そして、クエリのフィールドの統計情報の数 4 5 SELECT COUNT(*)AS signer_mobile繰り返し、住所、signer_name、FROMuser_operation_useraddress GROUPを BY signer_mobile、住所、signer_name HAVING繰り返し> 1 ; //フィールドのレコード数よりも大きい場合、クエリ直します
これらは、MySQLの環境下でDjangoの重複排除クエリです。