前言
最近在一个django项目中需要从数据库中查询minutes mod 5 = 0的所有数据。即从数据库中查询所有分钟是5的倍数的数据。如果利用django中现有的查询器,可以利用minutes__in = [0,5,10,15,...]实现。但是有一个更加具有通用性的办法(毕竟指不定下一次又需要一些什么奇奇怪怪的查询条件):自定义查询器。
什么是查询器呢?__lt,__gt,__range,__in等等这些就是所谓的查询器
实现
第一步:在manage.py中定义特殊的查询条件。
from django.db.models.fields import Field
from django.db.models import Lookup
class modEqual(Lookup):
lookup_name = 'modEqual'
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
print(lhs, lhs_params)
print(rhs, rhs_params)
return '%s mod %s = 0' % (lhs, rhs), params
你可能会说:看起来有点难啊,铁子。其实这个就是一个paper t