【问题标题】:Django Query distinct values works but i cant use the query resultDjango Query distinct values 有效,但我无法使用查询结果
【发布时间】: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()

标签: python django django-views distinct django-queryset


【解决方案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!欢迎来到堆栈溢出。请务必阅读指南 - 不要只提供代码作为答案,请告诉我们您的解决方案!
      • 效果可能很好,但它仍然会加载所有内容。它没有优化。所以不要将它用于大型数据集。
      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      相关资源
      最近更新 更多