【问题标题】:django pass a predicate to filter funtiondjango 传递一个谓词来过滤函数
【发布时间】:2015-03-06 23:07:03
【问题描述】:

我有以下代码,你可以看到唯一改变的是函数调用 point__distance_gte 或 point__distance_lte。有没有办法将此函数从调用代码中外部化。

def search():
    if distance == 50:
        jobs = list(Job.objects.filter(point__distance_gte=(ref_pnt, D(**distance_from_point))))
    else:                   
        jobs = list(Job.objects.filter(point__distance_lte=(ref_pnt, D(**distance_from_point)))

比如:

def search(predicate):
    jobs = list(Job.objects.filter(predicate))

虽然,我在这里只展示了一个过滤器,但实际上我已经将过滤器和预取条件链接到查询中,如果我不得不重复代码,这会变得很丑。

【问题讨论】:

    标签: django django-queryset django-1.7


    【解决方案1】:

    因为objects.filter实际上是一个函数,你可以像普通函数一样传递kwargs。因此,在您的示例中,您可以执行以下操作:

    def search(**kwargs):
        jobs = list(Job.objects.filter(**kwargs))
    
    search(point__distance_gte=(ref_pnt, D(**distance_from_point)))
    search(point__distance_lte=(ref_pnt, D(**distance_from_point)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2018-05-02
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多