Djangoはdistinctを使用してDISTINCTONフィールドを報告しますが、このデータベースバックエンドではサポートされていません



Django Uses Distinct Report Distinct Fields Is Not Supported This Database Backend



前に書かれた

最近、Djangoでdistinctを使用して再利用するデータベースクエリを実行し、メソッドのソースコードを直接表示しました。

def distinct(self, *field_names): ''' Return a new QuerySet instance that will select only distinct results. ''' assert self.query.can_filter(), 'Cannot create distinct fields once a slice has been taken.' obj = self._chain() obj.query.add_distinct_fields(*field_names) return obj

メソッドが1つ以上のfield_namesパラメーターを受け入れることがわかりました。これが、データベースで重複排除する必要があるフィールドの名前であることを知りたくありません。



エラー表示

だから、私は当然のことながら小さな顔をやり直しました:

Category.objects.filter(article__is_origin=True,article__is_recommend=True).distinct('name'),

最初に次のコードを説明し、記事分類テーブルをクエリしますis_origin = Trueそしてis_recommend=True分類してから、フィルターで除外しますname分類を繰り返した後に戻ります。
そしてエラーデビュー:
画像
このエラーを見て、最初の反応は当然、Djangoのドキュメントを確認することです。
djangoのオンラインドキュメントでは、個別の接続について次のように説明しています。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct。
特定のドキュメントには行きません。解決策を直接言う



エラー解決

Mysqlデータベースを使用する場合は、 Distinct()にはパラメーターがありません。パラメーターは、値で記述する必要があります。 、次のようにコードを変更します。

Category.objects.filter(article__is_origin=True,article__is_recommend=True).values('name').distinct(),

問題が解決しました !!!