如何在Django中创建自定义field lookups

过滤查询集时,django提供了一组您可以使用的查询:__contains__iexact__in等等。我希望能够为我的经理提供新的查询,例如,有人可以说:

twentysomethings = Person.objects.filter(age__within5=25)

并获取年龄在20到30岁之间的所有Person对象。我是否需要将QuerySetManager类子类化?如何实现?

最佳答案

从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/

10-12 18:29