zoukankan      html  css  js  c++  java
  • django model中的extra()和get_FOO_display

    extra

    有时候, Django 提供的查询语法不太够用. 为了满足这些边缘需求, Django 提供了 extra() 结果集修改器 - 一种提供额外查询参数的机制.
    
    要注意这些额外的方式对不同的数据库引擎可能存在移植性问题.(因为你在显式的书写SQL语句),除非万不得已,尽量避免这样做:
    
    params
    
    下面描述的所有 额外-SQL 参数都必须是标准 Python 字符串格式(数据库引擎会自动用引号将它引起).``params`` 参数可以包含任意多个的SQL参数.
    
    select
    
    select 关键字参数允许你选择特定的字段. 它是一个字典(属性名与 SQL 语句的映射). 举例来说:
    
        Poll.objects.extra(
            select={
                'choice_count': 'SELECT COUNT(*) FROM choices WHERE poll_id = polls.id'
            }
        )
    
    每个返回的 ``Poll`` 对象会有一个额外的属性: ``choice_count``, 一个关联`` Choice`` 对象的整数. 注意大多数数据库引擎需要用括号将子查询括起来. Django 的 ``select`` 子句则不需要这个括号.
    where / tables
    如果你需要传递一个额外的 WHERE 子句 -- 比方进行一个非显式的连接--你可以使用 where 关键字参数. 如果你需要在查询中连接其它的表,你可以传递它们的名字给 tables 参数.
    where 和 tables 都接受一个字符串列表作为它们的值.所有的 where 参数都被 "AND" 到其它的查询条件中.
    
    举例来说:
    
        Poll.objects.filter(
            question__startswith='Who').extra(where=['id IN (3, 4, 5, 20)'])
    
    ...翻译成 SQL 语句就是::
    
        SELECT * FROM polls_polls WHERE question LIKE 'Who%' AND id IN (3, 4, 5, 20);
    

    get_FOO_display

    如果一个字段有 choices 选项集事, 这个对象将有一个 get_FOO_display() 方法.这里 FOO 是该字段的名字. 这个方法返回一个 "human-readable" 的字段值. 举例来说, 下面的model中:
    
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    class Person:
        name = models.CharField(maxlength=20)
        gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
    ...每个 Person 实例会拥有一个 get_gender_display() 的方法. 示例:
    
    >>> p = Person(name='John', gender='M')
    >>> p.save()
    >>> p.gender
    'M'
    >>> p.get_gender_display()
    'Male'
    
  • 相关阅读:
    个人作业-Alpha项目测试
    第三次作业-结对编程
    第二次作业
    第一次阅读作业
    canal同步mysql数据至es5.5.0
    工作一周年小结
    Java集合操作 遍历list并转map
    网易秋招校招编程题
    堆外内存总结
    网易秋招内推编程题题解
  • 原文地址:https://www.cnblogs.com/goser/p/7388207.html
Copyright © 2011-2022 走看看