teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

削除

2021/06/20 10:34

投稿

Madai
Madai

スコア29

title CHANGED
File without changes
body CHANGED
@@ -29,21 +29,4 @@
29
29
 
30
30
  <追伸> 上記関数は機能に問題ありです。 
31
31
  Djangoのfilterは変数名(name_icontainsのように)で検索条件を操作していますが、関数化するためには、変数名を動的に生成する必要があります。
32
- exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
32
+ exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
33
- 以下のソースのように引数で管理しようとしても、変数名がname_icontains などではなく、search_conditionとして扱われてしまうようです。
34
-
35
- ```ここに言語を入力
36
- def and_search(model, search_conditions_list, search_values_list):
37
- filter_factor = []
38
-
39
- i = 0
40
- for search_condition in search_conditions_list:
41
- if len(search_values_list[i]) != 0:
42
- search_value = search_values_list[i]
43
- filter_factor.append(Q(search_condition = search_value))
44
- print(filter_factor)
45
- i += 1
46
-
47
- return model.objects.select_related().filter(*filter_factor)
48
- ```
49
- > and_search(Clients, ['name__icontains', 'neme_kana__icontains'], ['あいうえお','アイウエオ'])

5

ほそく

2021/06/20 10:34

投稿

Madai
Madai

スコア29

title CHANGED
File without changes
body CHANGED
@@ -31,6 +31,7 @@
31
31
  Djangoのfilterは変数名(name_icontainsのように)で検索条件を操作していますが、関数化するためには、変数名を動的に生成する必要があります。
32
32
  exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
33
33
  以下のソースのように引数で管理しようとしても、変数名がname_icontains などではなく、search_conditionとして扱われてしまうようです。
34
+
34
35
  ```ここに言語を入力
35
36
  def and_search(model, search_conditions_list, search_values_list):
36
37
  filter_factor = []
@@ -44,4 +45,5 @@
44
45
  i += 1
45
46
 
46
47
  return model.objects.select_related().filter(*filter_factor)
47
- ```
48
+ ```
49
+ > and_search(Clients, ['name__icontains', 'neme_kana__icontains'], ['あいうえお','アイウエオ'])

4

わかりやすい表現に

2021/06/20 10:33

投稿

Madai
Madai

スコア29

title CHANGED
File without changes
body CHANGED
@@ -28,9 +28,9 @@
28
28
 
29
29
 
30
30
  <追伸> 上記関数は機能に問題ありです。 
31
- Djangoのfilterは変数名で検索条件を操作していますが(name__icontains)、関数化するためには、変数名を動的に生成する必要があります。
31
+ Djangoのfilterは変数名(name_icontainsのように)で検索条件を操作していますが、関数化するためには、変数名を動的に生成する必要があります。
32
32
  exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
33
- 同様に引数で管理しようとしても、変数名がname__icontains などではなく、search_conditionとして扱われようです。
33
+ 以下のソースのように引数で管理しようとしても、変数名がname_icontains などではなく、search_conditionとして扱われてしまうようです。
34
34
  ```ここに言語を入力
35
35
  def and_search(model, search_conditions_list, search_values_list):
36
36
  filter_factor = []

3

軽微改修

2021/06/20 10:26

投稿

Madai
Madai

スコア29

title CHANGED
File without changes
body CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
 
29
29
 
30
- !PS 上記関数は機能に問題ありです。 
30
+ <追伸> 上記関数は機能に問題ありです。 
31
31
  Djangoのfilterは変数名で検索条件を操作していますが(name__icontains)、関数化するためには、変数名を動的に生成する必要があります。
32
32
  exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
33
33
  同様に引数で管理しようとしても、変数名がname__icontains などではなく、search_conditionとして扱われるようです。

2

情報の追加

2021/06/20 10:10

投稿

Madai
Madai

スコア29

title CHANGED
File without changes
body CHANGED
@@ -23,4 +23,25 @@
23
23
  return model.objects.select_related().filter(☆ここでfilter_factorリストにあるQオブジェクトをあるだけANDしたい)
24
24
  ```
25
25
  and_search関数の実行イメージは以下です。
26
- > and_search(Model, ['name','name_kana'], ['icontains', 'icontains'], ['あいうえお','アイウエオ'])
26
+ > and_search(Model, ['name','name_kana'], ['icontains', 'icontains'], ['あいうえお','アイウエオ'])
27
+
28
+
29
+
30
+ !PS 上記関数は機能に問題ありです。 
31
+ Djangoのfilterは変数名で検索条件を操作していますが(name__icontains)、関数化するためには、変数名を動的に生成する必要があります。
32
+ exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
33
+ 同様に引数で管理しようとしても、変数名がname__icontains などではなく、search_conditionとして扱われるようです。
34
+ ```ここに言語を入力
35
+ def and_search(model, search_conditions_list, search_values_list):
36
+ filter_factor = []
37
+
38
+ i = 0
39
+ for search_condition in search_conditions_list:
40
+ if len(search_values_list[i]) != 0:
41
+ search_value = search_values_list[i]
42
+ filter_factor.append(Q(search_condition = search_value))
43
+ print(filter_factor)
44
+ i += 1
45
+
46
+ return model.objects.select_related().filter(*filter_factor)
47
+ ```

1

不要削除

2021/06/20 10:09

投稿

Madai
Madai

スコア29

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,6 @@
18
18
  search_value = search_values_list[i]
19
19
  search_condition = search_conditions_list[i]
20
20
  filter_factor.append(Q(exec("{} = '{}'".format(field + '__' + search_condition, search_value))))
21
- print(filter_factor)
22
21
  i += 1
23
22
 
24
23
  return model.objects.select_related().filter(☆ここでfilter_factorリストにあるQオブジェクトをあるだけANDしたい)