12

不幸的是,我有一个MySQL数据库与Django 1.4.1 一起使用。 如果我做对了,不同的功能仅适用于 POSTGRESQL。

我必须使一个不同的查询包含多个值,而只有一个不同的值,

喜欢; 这适用于 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 Query distinct values works 但我无法使用查询结果

于 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

如果您想将 DISTINCT 与 WHERE 语句一起使用,则可以使用此代码。

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