zoukankan      html  css  js  c++  java
  • Django objects.values

    values(*fields)

    返回一个ValuesQuerySet —— QuerySet 的一个子类,迭代时返回字典而不是模型实例对象。

    每个字典表示一个对象,键对应于模型对象的属性名称。

    下面的例子将values() 与普通的模型对象进行比较:

    # This list contains a Blog object.
    >>> Blog.objects.filter(name__startswith='Beatles')
    [<Blog: Beatles Blog>]
    
    # This list contains a dictionary.
    >>> Blog.objects.filter(name__startswith='Beatles').values()
    [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]

    values() 接收可选的位置参数*fields,它指定SELECT 应该限制哪些字段。如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。

    例如:

    >>> Blog.objects.values()
    [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
    >>> Blog.objects.values('id', 'name')
    [{'id': 1, 'name': 'Beatles Blog'}]

    值得注意的几点:

    • 如果你有一个字段foo 是一个ForeignKey,默认的values() 调用返回的字典将有一个叫做foo_id 的键,因为这是保存实际的值的那个隐藏的模型属性的名称(foo 属性引用关联的模型)。当你调用values() 并传递字段的名称,传递foo 或foo_id 都可以,得到的结果是相同的(字典的键会与你传递的字段名匹配)。

      例如:

      >>> Entry.objects.values()
      [{'blog_id': 1, 'headline': 'First Entry', ...}, ...]
      
      >>> Entry.objects.values('blog')
      [{'blog': 1}, ...]
      
      >>> Entry.objects.values('blog_id')
      [{'blog_id': 1}, ...]
      • values() 与distinct() 一起使用时,注意排序可能影响最终的结果。详细信息参见distinct() 中的备注。

      • 如果values() 子句位于extra() 调用之后,extra() 中的select 参数定义的字段必须显式包含在values() 调用中。values() 调用后面的extra() 调用将忽略选择的额外的字段。

      • values() 之后调用only() 和defer() 不太合理,所以将引发一个NotImplementedError

       

      最后,要注意ValuesQuerySet 是QuerySet 的子类,它实现了大部分相同的方法。你可以对它调用filter()order_by() 等等。这表示下面的两个调用完全相同:

      Blog.objects.values().order_by('id')
      Blog.objects.order_by('id').values()

      Django 的作者喜欢将影响SQL 的方法放在前面,然后放置影响输出的方法(例如values()),但是实际上无所谓。这是卖弄你个性的好机会。

      你可以通过OneToOneFieldForeignKey 和 ManyToManyField 属性反向引用关联的模型的字段:

      Blog.objects.values('name', 'entry__headline')
      [{'name': 'My blog', 'entry__headline': 'An entry'},
           {'name': 'My blog', 'entry__headline': 'Another entry'}, ...]
  • 相关阅读:
    日期时间基本知识
    VScode 常用操作
    js实现图片的Blob base64 ArrayBuffer 的各种转换
    window.postMessage()实现(iframe嵌套页面)跨域消息传递
    软件工程概论个人总结
    软件工程学习进度表(第十六周)
    《构建之法》阅读笔记
    软件工程学习进度表(第十五周)
    《人月神话》阅读笔记06
    《人月神话》阅读笔记05
  • 原文地址:https://www.cnblogs.com/haoshine/p/5551346.html
Copyright © 2011-2022 走看看