如何在Django中创建自定义field lookups?
过滤查询集时,django提供了一组您可以使用的查询:__contains
,__iexact
,__in
等等。我希望能够为我的经理提供新的查询,例如,有人可以说:
twentysomethings = Person.objects.filter(age__within5=25)
并获取年龄在20到30岁之间的所有
Person
对象。我是否需要将QuerySet
或Manager
类子类化?如何实现? 最佳答案
从Django 1.7开始,有一种简单的方法可以实现它。您的示例实际上与the documentation中的示例非常相似:
from django.db.models import Lookup
class AbsoluteValueLessThan(Lookup):
lookup_name = 'lt'
def as_sql(self, qn, connection):
lhs, lhs_params = qn.compile(self.lhs.lhs)
rhs, rhs_params = self.process_rhs(qn, connection)
params = lhs_params + rhs_params + lhs_params + rhs_params
return '%s < %s AND %s > -%s' % (lhs, rhs, lhs, rhs), params
AbsoluteValue.register_lookup(AbsoluteValueLessThan)
注册时,您可以只使用
Field.register_lookup(AbsoluteValueLessThan)
代替。关于python - 在Django中创建自定义字段查找,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2203179/