在Django中提供了很多内置的查询器,但有时候并不满足我们实际业务需求,这个时候可以根据我们实际业务场景来自定义查询器。
例如:自定义一个"不等于"查询器
# 实现 不等于 查询器,并使用修饰器直接注册
@Field.register_lookup
class NotEqual(Lookup):
lookup_name = 'neq'
def as_sql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return '%s <> %s' % (lhs, rhs), params
使用方法与其它查询器一样:
id__neq=1 # 等价于SQL:id <> 1