12

残念ながら、 Django1.4.1で使用されているMySQLデータベースがあります。 Distinct関数は、正しく理解した場合にのみPOSTGRESQLで機能します。

個別のクエリを複数の値で構成する必要がありますが、個別の値は1つだけです。

好き; これはPOSTGREでは機能しますが、MYSQLでは機能しません。次のエラーが発生します。

DISTINCT ONフィールドは、このデータベースバックエンドではサポートされていません

staff = Staff.objects.order_by('person__full_name').distinct('person__full_name')

それから私は試しました

staff = Staff.objects.values('person__full_name','staff_job_categories').distinct().order_by('person__full_name')

しかし、スタッフの職種も取得しているため、明確な値は取得できません。しかし、それを含まない場合、配列として取得できませんでした。

何か案が ?

4

4 に答える 4

18

.distinct([*fields])PostgresSQLでのみ機能します。

個別のドキュメントから

違いは次のとおりです。通常のdistinct()呼び出しの場合、データベースは、どの行が異なるかを判別するときに、各行の各フィールドを比較します。指定されたフィールド名を使用したdistinct()呼び出しの場合、データベースは指定されたフィールド名のみを比較します。

前述のように、レコード内のすべてのフィールドがチェックされます。ほとんどの場合、フィールド値が異なるレコードを取得している可能性があります(複数のテーブルManyToManyまたはForeignKeyリレーションをクエリしている場合の可能性が高くなります)。

配列として統合するために、以前の質問を参照できますDjangoクエリの個別の値は機能しますが、クエリ結果を使用できません

于 2012-09-13T09:34:05.963 に答える
5
names = Staff.objects.order_by('person__full_name').values('person__full_name').distinct()

明確なフルネームが表示され、同様のことを行って明確な職種を取得できます。

これらは、オブジェクト自体ではなく、値のリストを提供しますが、私があなたの質問を正しく解釈すれば、これらはあなたが望むものを提供すると思います。

于 2014-02-05T18:40:29.590 に答える
0

すべてのデータベースがDistinct('field name')をサポートしているわけではありません。だから私たちにできることは、非常に単純な問題解決スキルを使うことです

 class vendor_ready_distinct(APIView):
        def get(self, request):
            obj_readyproduct = vendor_list_readyProduct.objects.all().order_by('mobile_number')

            unique_list = []
            list = []
            for x in obj_readyproduct:
                # check if exists in unique_list or not
                if x.mobile_number not in list:
                    unique_list.append(x)
                    list.append(x.mobile_number)
    
            seri_obj = vendor_list_readyProductSerializer(unique_list, many=True)
            return Response(seri_obj.data)

ここでは、geeksforgeeksのメソッド1を使用して個別の行を取得しています

于 2021-08-21T15:47:37.417 に答える
0

WHEREステートメントでDISTINCTを使用する場合は、このコードを使用できます。

staff = Staff.objects.filter(person__full_name="Alex").values('staff_job_categories').distinct().order_by('person__full_name')
于 2021-09-28T14:25:31.207 に答える