2016-08-04 33 views
0

我搜索一种方法来优化我的Django的研究功能(在python中)。在这个时候,我有这样的:Django objects.filter与循环中的参数

def search(acronym=None, name=None, reference=None): 
    queryset = Organization.objects 

    if acronym: 
     queryset = queryset.filter(acronym=acronym) 

    if name: 
     queryset = queryset.filter(name=name) 

    if reference: 
     queryset = queryset.filter(reference=reference) 

    return queryset 

的问题是,每次我加一个说法,我要是+过滤器,添加等 还有就是把这个循环的方法吗?

例如:

def search(acronym=None, name=None, reference=None): 
    queryset = Organization.objects 
    for arg in args : 
     if arg : 
      queryset = queryset.filter(arg = arg) 
    return queryset 

或类似的东西?

在此先感谢

+0

请问'高清搜索(** kwargs)'...'queryset.filter(** kwargs)'工作?(我没有时间atm来测试它) – Sayse

回答

0

使用**kwargs在函数定义,并筛选出使用字典解析才通过和None重视项目拆包命名参数filter

def search(**kwargs): 
    kwargs = {k: v for k, v in kwargs.items() if v} 
    queryset = Organization.objects.filter(**kwargs) 
    return queryset 
+0

它完美的工作。谢谢 :) – Meojifo