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 有效,但我无法使用查询结果的主要内容,如果未能解决你的问题,请参考以下文章
MS ACCESS SQL QUERY COUNT DISTINCT