質問編集履歴

6

削除

2021/06/20 10:34

投稿

Madai
Madai

スコア29

test CHANGED
File without changes
test CHANGED
@@ -61,37 +61,3 @@
61
61
  Djangoのfilterは変数名(name_icontainsのように)で検索条件を操作していますが、関数化するためには、変数名を動的に生成する必要があります。
62
62
 
63
63
  exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
64
-
65
- 以下のソースのように引数で管理しようとしても、変数名がname_icontains などではなく、search_conditionとして扱われてしまうようです。
66
-
67
-
68
-
69
- ```ここに言語を入力
70
-
71
- def and_search(model, search_conditions_list, search_values_list):
72
-
73
- filter_factor = []
74
-
75
-
76
-
77
- i = 0
78
-
79
- for search_condition in search_conditions_list:
80
-
81
- if len(search_values_list[i]) != 0:
82
-
83
- search_value = search_values_list[i]
84
-
85
- filter_factor.append(Q(search_condition = search_value))
86
-
87
- print(filter_factor)
88
-
89
- i += 1
90
-
91
-
92
-
93
- return model.objects.select_related().filter(*filter_factor)
94
-
95
- ```
96
-
97
- > and_search(Clients, ['name__icontains', 'neme_kana__icontains'], ['あいうえお','アイウエオ'])

5

ほそく

2021/06/20 10:34

投稿

Madai
Madai

スコア29

test CHANGED
File without changes
test CHANGED
@@ -64,6 +64,8 @@
64
64
 
65
65
  以下のソースのように引数で管理しようとしても、変数名がname_icontains などではなく、search_conditionとして扱われてしまうようです。
66
66
 
67
+
68
+
67
69
  ```ここに言語を入力
68
70
 
69
71
  def and_search(model, search_conditions_list, search_values_list):
@@ -91,3 +93,5 @@
91
93
  return model.objects.select_related().filter(*filter_factor)
92
94
 
93
95
  ```
96
+
97
+ > and_search(Clients, ['name__icontains', 'neme_kana__icontains'], ['あいうえお','アイウエオ'])

4

わかりやすい表現に

2021/06/20 10:33

投稿

Madai
Madai

スコア29

test CHANGED
File without changes
test CHANGED
@@ -58,11 +58,11 @@
58
58
 
59
59
  <追伸> 上記関数は機能に問題ありです。 
60
60
 
61
- Djangoのfilterは変数名で検索条件を操作していますが(name__icontains)、関数化するためには、変数名を動的に生成する必要があります。
61
+ Djangoのfilterは変数名(name_icontainsのようにで検索条件を操作していますが、関数化するためには、変数名を動的に生成する必要があります。
62
62
 
63
63
  exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
64
64
 
65
- 同様に引数で管理しようとしても、変数名がname__icontains などではなく、search_conditionとして扱われようです。
65
+ 以下のソースのように引数で管理しようとしても、変数名がname_icontains などではなく、search_conditionとして扱われてしまうようです。
66
66
 
67
67
  ```ここに言語を入力
68
68
 

3

軽微改修

2021/06/20 10:26

投稿

Madai
Madai

スコア29

test CHANGED
File without changes
test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- !PS 上記関数は機能に問題ありです。 
59
+ <追伸> 上記関数は機能に問題ありです。 
60
60
 
61
61
  Djangoのfilterは変数名で検索条件を操作していますが(name__icontains)、関数化するためには、変数名を動的に生成する必要があります。
62
62
 

2

情報の追加

2021/06/20 10:10

投稿

Madai
Madai

スコア29

test CHANGED
File without changes
test CHANGED
@@ -49,3 +49,45 @@
49
49
  and_search関数の実行イメージは以下です。
50
50
 
51
51
  > and_search(Model, ['name','name_kana'], ['icontains', 'icontains'], ['あいうえお','アイウエオ'])
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+ !PS 上記関数は機能に問題ありです。 
60
+
61
+ Djangoのfilterは変数名で検索条件を操作していますが(name__icontains)、関数化するためには、変数名を動的に生成する必要があります。
62
+
63
+ exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
64
+
65
+ 同様に引数で管理しようとしても、変数名がname__icontains などではなく、search_conditionとして扱われるようです。
66
+
67
+ ```ここに言語を入力
68
+
69
+ def and_search(model, search_conditions_list, search_values_list):
70
+
71
+ filter_factor = []
72
+
73
+
74
+
75
+ i = 0
76
+
77
+ for search_condition in search_conditions_list:
78
+
79
+ if len(search_values_list[i]) != 0:
80
+
81
+ search_value = search_values_list[i]
82
+
83
+ filter_factor.append(Q(search_condition = search_value))
84
+
85
+ print(filter_factor)
86
+
87
+ i += 1
88
+
89
+
90
+
91
+ return model.objects.select_related().filter(*filter_factor)
92
+
93
+ ```

1

不要削除

2021/06/20 10:09

投稿

Madai
Madai

スコア29

test CHANGED
File without changes
test CHANGED
@@ -38,8 +38,6 @@
38
38
 
39
39
  filter_factor.append(Q(exec("{} = '{}'".format(field + '__' + search_condition, search_value))))
40
40
 
41
- print(filter_factor)
42
-
43
41
  i += 1
44
42
 
45
43