【问题标题】:getting values of QuerySet in django在 django 中获取 QuerySet 的值
【发布时间】:2018-02-04 08:15:23
【问题描述】:

如何在这个 QuerySet 中获取 course_code 的值?

<QuerySet [{'course_code': 11}]>

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    使用这个

    someTable.objects.all()[0]['course_code']
    

    someTable.objects.values_list('course_code', flat = True)
    

    【讨论】:

    • someTable.objects.values_list('course_code', flat = True) 这将返回一个查询集。
    • ...不是列表*
    • 非常感谢 flat=True 救了我的命
    【解决方案2】:

    什么对我有用:

    course_qs = <whatever query gave you the queryset>  
    list_of_course = list(course_qs)
    

    When QuerySets are evaluated

    1. 第一次迭代它们时
    2. 例如,当您对它们进行切片时,Post.objects.all()[:3]
    3. 当您腌制或缓存它们时
    4. 当您对它们调用 repr() 或 len() 时
    5. 当您显式调用它们的 list() 时
    6. 当您在语句中测试它们时,例如 bool()orandif

    【讨论】:

      【解决方案3】:
      course_qs = <whatever query gave you the queryset>
      for course in course_qs:
          print(course['course_code'])
      

      【讨论】:

      • 为什么我会收到错误 TypeError: 'DutyModeOfCalc' object is not subscriptable
      • @user12379095 这是因为查询集返回一个列表,一个数组。您不可能告诉该列表查找索引“course_code”,它不存在。您必须遍历它或指定列表中的索引,然后为每个对象指定 ['course_code']。这意味着这个答案不是正确的
      • 为什么queryset没有提供任何获取列表的功能?例如,为什么每次获取列时都必须循环遍历。
      【解决方案4】:

      现在比以前容易多了。例如,您可以使用:

      obj = Model.objects.all().first()  # {'course_code': 11}
      course_code = obj.course_code      # 11
      

      【讨论】:

        【解决方案5】:

        您可以尝试以下方法,它会从 查询集。

        courses = <your query set>
        linked_content = []
        for content in courses:
            linked_content.append(content)
        return linked_content
        

        【讨论】:

          【解决方案6】:
          courses = <your query set>
          print(courses[0]['course_code'])
          

          【讨论】:

            【解决方案7】:

            这将返回一个查询集:Django 4.0

            result = User.objects.filter(Q(ip__icontains='count')) #<QuerySet [<User: count>]>
            

            这会返回count的值:

            result.values('count').get()['count']
            

            但是这太疯狂了?!必须而且应该有一个更简单的解决方案...

            型号:

            class User(django.Model):
                 count = models.PositiveIntegerField(default=1)
            

            【讨论】:

              【解决方案8】:

              好吧,这就是我所做的。

              1:

              items = ItemParent.objects.filter(item_type__contains="something")
              # <QuerySet [<Item: iron>]>
              

              2:

              items.values()
              # <QuerySet [{'id': 5, 'item_parent_id': 8, 'item_type': 'iron', 'item_article_no': '12336'}]>
              

              3:

              items.values()["id"]
              # 5
              

              QuerySets为多个集合时:

              # <QuerySet [{'id': 5, 'item_parent_id': 8, 'item_type': 'iron', 'item_article_no': '12336'},
              #            {'id': 6, 'item_parent_id': 9, 'item_type': 'rust', 'item_article_no': '12338'}]>
              
              item_id_one = items.values()[0]["id"]
              item_id_two = items.values()[1]["id"]
              # etc..
              

              或者在我的情况下:

              for f in items.values()
                  item_id = f["id"]
              

              【讨论】:

                猜你喜欢
                • 2020-11-29
                • 1970-01-01
                • 2020-08-06
                • 2013-04-26
                • 2021-05-06
                • 2022-11-30
                • 2020-02-13
                • 2017-10-03
                • 2020-01-19
                相关资源
                最近更新 更多