2016-08-04 32 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