2017-09-05 71 views
0

我想對我的未來過程有所幫助。我希望用戶可以創建他自己的Django請求,然後得到結果。用戶標準的Django請求

到現在爲止,我創建Django的請求在我的劇本,但也有靜態請求:

request1 = Test.objects.all()

query_lastname_ID = request.GET.get('q1ID') 
    query_firstname_ID = request.GET.get('q1bisID') 
    query_naissance_ID = request.GET.get('q1terID') 

    if query_firstname_ID and query_lastname_ID and query_naissance_ID : 

     query_ID_list = Individu.objects.filter(
               Nom__icontains=query_lastname_ID, 
               Prenom__icontains=query_firstname_ID, 
               VilleNaissance__icontains=query_naissance_ID) 
     if len(query_ID_list) != 0 : 
      messages.success(request, 'Miracle .. Vous avez un résultat !') 
     else : 
      messages.error(request, "Oh non .. Vous n'avez aucun résultat !") 

所有這些請求都是靜態的。

現在我想讓標準或數學運算符之間的用戶選擇。

我不會寫表的字段在我的請求,但用戶可以有選擇地得到他想要的東西:

  • 一個場
  • 兩個領域
  • X領域
  • 數學運算符(=,>,<,不等,...)
  • 字段之間的比較
  • ...

用戶可以通過動態請求得到結果。他可以創建自己的Django請求。

可能嗎?我沒有找到例子或單證有關這種類型的處理:/

回答

1

您可以嘗試創建過濾器字典,例如:

map_fields_get = { 
    'Nom': 'q1ID', 'Prenom': 'q1bisID', 'VilleNaissance': 'q1terID' 
} 
condition_param = 'YOUR_GET_NAME_FOR_CONDITION' 
condition_list = ['icontains', 'iexact', 'gt', 'lt'] 
condition = request.GET.get('condition_param', 'icontains') 
if condition not in condition_list: 
    # add your logic set default or raise 
    condition = condition_list[0] 
qs_f = {} 
for get_f, f in map_fields_get.items(): 
    get_val = request.GET.get(get_f, None) 
    if get_val: 
     qs_f_key = '%s__%s' % (f, condition) 
     qs_f[qs_f_key] = get_val 

if qs_f: 
    query_ID_list = Individu.objects.filter(**qs_f) 
+0

Wouaw我有注意你的腳本讀取。我第一次嘗試做這種事情! – Deadpool