Django中的Transform和Lookup类

图片[1]-Django中的Transform和Lookup类-山海云端论坛

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
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容