Django Query distinct values 有效,但我无法使用查询结果

Posted

技术标签:

【中文标题】Django Query distinct values 有效,但我无法使用查询结果【英文标题】:Django Query distinct values works but i cant use the query result 【发布时间】:2012-09-05 02:56:31 【问题描述】:

我有一个表格列,其中一些值是双写或三写的。我想要一个独特的查询。

我试过了

staff = Staff.objects.all().values('person').distinct()
for k in staff:
     j = k.person
     print j,k

我得到 k.person 的“dict object has not attribute as person”

我得到 k 给了我一个类似

的结果
'person': 778L
'person': 779L
'person': 780L
'person': 781L
'person': 782L`

你知道我怎样才能得到人的价值吗?

【问题讨论】:

"k" 是一个字典。由 k['person'] 访问 现在有values_list() 【参考方案1】:

distinct 没有问题,values() 有问题。 values() 为您提供您请求的值的字典。要从 dict 获取属性,您可以使用dict['attr_name']

所以你可以试试这个:

staff = Staff.objects.all().values('person').distinct()
for k in staff:
    j = k['person']
    print j,k

【讨论】:

【参考方案2】:

@Rohan 是对的。 dict['attr_name'] 会给你你想要的。

staff = Staff.objects.all().values('person').distinct()
print staff.query

#it returns:
#SELECT DISTINCT "staff"."person" FROM "staff"

除此之外,如果你使用这个patch,你可以通过以下结构实现:

staff = Staff.objects.all().distinct('person')
for pr in staff:
    print pr['person']

【讨论】:

【参考方案3】:
query = Entity.objects.filter(field=x).order_by('field').distinct('field_name')

distinct('field_name') not supported? you can do the following.


----------


    query = Entity.objects.filter(field_name=value).order_by('field')

    copy1 = []

    copy2 = []
for data in query:
    if data.field_name not in copy1:
            copy1.append(data.field_name)
            copy2.append(data)


    query = copy2

【讨论】:

# 如果 field_name 是外键,则使用 field_name.pk 嗨,Sayeem!欢迎来到堆栈溢出。请务必阅读指南 - 不要只提供代码作为答案,请告诉我们您的解决方案! 效果可能很好,但它仍然会加载所有内容。它没有优化。所以不要将它用于大型数据集。

以上是关于Django Query distinct values 有效,但我无法使用查询结果的主要内容,如果未能解决你的问题,请参考以下文章

django之Form组件一

MS ACCESS SQL QUERY COUNT DISTINCT

Django 第十一篇Form组件基础

如何提高 Sql server 中 Distinct Query 的性能

django 之知识点总结以及Form组件

django 之知识点总结以及Form组件