2011-10-14 77 views
1

我試圖在函數中使用字符串作爲參數。是這樣的可能嗎?在函數中使用字符串作爲參數

from django.contrib.auth.models import User 

param_var = 'contains' 
User.objects.filter(first_name__{param_var}='John') 

# ideally, this should equate to: 
User.objects.filter(first_name__contains='John') 

回答

3
param_var = 'contains' 
User.objects.filter(**{'first_name__%s'%param_var: 'John'}) 

雖然我真的想知道這樣做的智慧......我想你可能會被重新發明的SQL注入...

我懷疑有一個更好的辦法。你應該更多地解釋你正在努力完成的事情。

+0

更何況,這是一個貧窮的風格和難以管理 – akonsu

+1

@akonsu:同意。以下面的答案爲例:「這是切開手腕的一種方法,但是你確定你想要嗎?」。 – retracile

1

解決:

# Something like this... 
qs = User.objects.all() 

parameters = { 
    'name': { 
     'type': 'get', 
     'filter': [ 
      'first_name__icontains', 
      'last_name__icontains', 
      # ... 
     ], 
    }, 
    # ... 
} 

for parameter, data in parameters.items(): 
    if data['type'] == 'get': 
     value = request.GET.get(parameter, None) 
    elif data['type'] == 'getlist': 
     value = request.GET.getlist(parameter) 

    if value: 
     query = Q() 

     for f in data['filter']: 
      query = query | Q(**{ f : value }) 
     qs = qs.filter(query) 
相關問題