Transform类
Transform 是用于实现字段转换的通用类。一个显而易见的例子是 __year
会将 DateField
转换为 IntegerField
。在表达式中执行查找的标记是 Transform<expression>__<transformation>
(例如 date__year
)。
这个类遵循查询表达式API,也就是说你可以使用 <expression>__<transform1>__<transform2>
。
属性:
- bilateral: 一个布尔值,表明是否对lhs和rhs都应用这个转换。如果对两侧都应用转换,应用在rhs的顺序和在查找表达式中的出现顺序相同。默认这个属性为False。使用方法的实例请见自定义查找。
- lhs: 在左边,也就是被转换的东西。必须遵循查询表达式API。
- lookup_name: 查找的名称,用于在解析查询表达式的时候识别它。
- output_field: 为这个类定义转换后的输出。必须为Field的实例。默认情况下和lhs.output_field相同。
方法:
- as_sql(): 需要被覆写;否则抛出NotImplementedError异常。
- get_lookup(lookup_name): 和get_lookup()相同。
- get_transform(transform_name): 和get_transform()相同。
Lookup类
Lookup 是实现查找的通用的类。查找是一个查询表达式,它的左边是lhs,右边是rhs;lookup_name
用于构造lhs和rhs之间的比较,来产生布尔值,例如 lhs in rhs
或者 lhs > rhs
。
在表达式中执行查找的标记是 <lhs>__<lookup_name>=<rhs>
。
属性:
- lhs: 在左边,也就是被查找的东西。这个对象必须遵循查询表达式API。
- rhs: 在右边,也就是用来和lhs比较的东西。它可以是个简单的值,也可以是在SQL中编译的一些东西,比如
F()
对象或者QuerySet
。 - lookup_name: 查找的名称,用于在解析查询表达式的时候识别它。
方法:
- process_lhs(compiler, connection[, lhs=None]): 返回元组(lhs_string, lhs_params),和
compiler.compile(lhs)
所返回的一样。这个方法可以被覆写,来调整lhs的处理方式。Compiler是一个SQLCompiler对象,可以像compiler.compile(lhs)
这样使用来编译lhs。Connection可以用于编译供应商特定的SQL语句。lhs如果不为None,会代替self.lhs作为处理后的lhs使用。 - process_rhs(compiler, connection): 对于右边的东西,和
process_lhs()
的行为相同。
© 版权声明
THE END
暂无评论内容