• 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'
    
  • 相关阅读:
    第五周作业
    作业4
    20182302 2019-2020-1 《数据结构与面向对象程序设计》实验3报告
    作业四
    实验二
    实验一
    排序大集合java
    阿里面试——运筹优化工程师
    树的子结构判断
    剑指offer——合并两个排序的链表——对象、引用和赋值初接触
  • 原文地址:https://www.cnblogs.com/goser/p/7388207.html
Copyright © 2020-2023  润新知