質問編集履歴

2

補足追加

2020/12/10 14:43

投稿

exnjinia
exnjinia

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- python djangoでデータベースの値取得できません
1
+ python djangoでpkを使用したデータベースの値取得の方法と、それを文字列に変換する方法を教えてください
2
2
 
3
3
 
4
4
 
@@ -6,11 +6,9 @@
6
6
 
7
7
  ・LINE Messaging APIを使用し、最後はLINEに返信するLINE BOTを作成しています。
8
8
 
9
- ・データベースから値を取得したいのですが、QuerySetを取得した後、それを値として返ことでき困っています。
9
+ ・データベースから値を取得し、文字列にしてLINEに返したいのですが、pk使用したデータの取得、それを文字列に変換る方法わからず困っています。
10
10
 
11
-
12
-
13
- heroku上でのデータベースはPostgreSQLです。
11
+ heroku上でのデータベースはPostgreSQLです。
14
12
 
15
13
 
16
14
 
@@ -22,11 +20,21 @@
22
20
 
23
21
 
24
22
 
23
+ CATEGORY = (('owarai','笑い系'),('majime','真面目系'),('skill','技術論系'),('item','アイテム系'),('others','その他'))
24
+
25
25
  class SampleModel(models.Model):
26
26
 
27
27
  article_name = models.CharField(max_length=200)
28
28
 
29
29
  article_url = models.TextField()
30
+
31
+ category = models.CharField(
32
+
33
+ max_length = 50,
34
+
35
+ choices = CATEGORY
36
+
37
+ )
30
38
 
31
39
 
32
40
 
@@ -66,13 +74,9 @@
66
74
 
67
75
 
68
76
 
69
- #・・・・・・・・・・・・・・・・・・・・・・・・・・・・
70
-
71
77
  ob = SampleModel.objects.filter(pk=setnum)
72
78
 
73
79
  result = str(ob)
74
-
75
- #・・・・・・・・・・・・・・・・・・・・・・・・・・・・
76
80
 
77
81
 
78
82
 
@@ -86,83 +90,21 @@
86
90
 
87
91
  LINE BOTなので、resultの値をLINEに返却します。
88
92
 
93
+ しかし、上記のpk=setnumという、pkを使用したデータの取り出しを行うと、reslutの結果として、LINEには
89
94
 
90
-
91
- のとき、LINEから適当な文字を入力すると、reslutの結果として、LINEには
95
+ ```こに言語を入力
92
96
 
93
97
  <QuerySet[]>
94
98
 
99
+ ```
100
+
95
- という返信きます。
101
+ という文字列だけが返信としててしいます。
102
+
103
+ ※pkの代わりにid=setnumを使用してもダメでした。
96
104
 
97
105
 
98
106
 
99
- データベース自体にはつながっていると思うので、このQuerysetからarticle_name(ブログの記事名)を取り出したいのですが、うまくいきません。
100
-
101
- 調べた限りで以下のいくつかの方法を試してみましたが、値を取得することができません。(既読だけついて何も返信がなく終了します)
102
-
103
-
104
-
105
- ※上記コード中、コメントで囲まれた部分だけを次のとおり変更して試しました
106
-
107
- ※【result = str(ob)】の部分は、すべて【result = ob】と【result = ob.article_name】でも試しています。
108
-
109
- ```python
110
-
111
- #①・・・・・・・・・・・・・・・・・・・・・・・・・・・・
112
-
113
- ob = SampleModel.objects.values_list('article_name',flat=True).get(pk=setnum)
114
-
115
- result = str(ob)
116
-
117
- #・・・・・・・・・・・・・・・・・・・・・・・・・・・・
118
-
119
-
120
-
121
- #②・・・・・・・・・・・・・・・・・・・・・・・・・・・・
122
-
123
- ob = SampleModel.objects.get(pk=setnum)
107
+ しかし、次のように、pkではなく、categoryを使用してデータを取り出すと、
124
-
125
- result = str(ob)
126
-
127
- #・・・・・・・・・・・・・・・・・・・・・・・・・・・・
128
-
129
-
130
-
131
- #③・・・・・・・・・・・・・・・・・・・・・・・・・・・・
132
-
133
- ob = SampleModel.objects.values_list('article_name).get(pk=setnum)
134
-
135
- result = str(ob)
136
-
137
- #・・・・・・・・・・・・・・・・・・・・・・・・・・・・
138
-
139
-
140
-
141
- #④・・・・・・・・・・・・・・・・・・・・・・・・・・・・
142
-
143
- ob = SampleModel.objects.filter(pk=setnum)
144
-
145
- ob_a = list(ob.values())
146
-
147
- result = ob_a["article_name"]
148
-
149
- #・・・・・・・・・・・・・・・・・・・・・・・・・・・・
150
-
151
- ```
152
-
153
-
154
-
155
- ①〜④いずれもLINEに何も返ってこない(=既読だけがついて返信がない)という状態です。
156
-
157
-
158
-
159
- ローカル環境でprintデバッグをしたところ、コンソールにarticle_nameの値が表示されたのですが、heroku上で動かすとダメです。
160
-
161
-
162
-
163
- なお、次のコードで試すと、1からデータ登録件数の間のランダムな数値がLINEに表示されるという想定通りの動作をしてくれます。
164
-
165
-
166
108
 
167
109
  ```python
168
110
 
@@ -180,7 +122,13 @@
180
122
 
181
123
 
182
124
 
125
+ ob = SampleModel.objects.filter(category='owarai')
126
+
127
+ result = str(ob)
128
+
129
+
130
+
183
- return setnum
131
+ return result
184
132
 
185
133
 
186
134
 
@@ -188,12 +136,40 @@
188
136
 
189
137
 
190
138
 
191
- ①〜④コードを
139
+ result結果として
192
140
 
193
- setnum = random.randint(1, int(num))
141
+ ```ここに言語を入力
194
142
 
195
- の後に入れ込むとLINEに何も返事が返ってこない(既読がつくだけで終了)ことから、①〜④のコードが原因でheroku上でコケてエラーになってしまっていることは想定できるのですが、解決方法がわからずにいます。
143
+ <QuerySet[<SampleModel:ブログ1>,<SampleModel:ブログ2>,<SampleModel:ブログ3>,]>
144
+
145
+ ```
146
+
147
+ という文字列がLINEに表示されます。
148
+
149
+ どうやら、categoryを使用すると,データは取得できているようです。
196
150
 
197
151
 
198
152
 
153
+ しかし、この先、たとえば取得できたこの3つのデータの中から一つを取り出し、文字列としてLINEに返す方法がわかりません。
154
+
155
+ dict型への変換などをしてみたのですが、それをした途端、LINEには一切返信が来なくなります(既読だけついて終了。)
156
+
157
+
158
+
159
+
160
+
199
- なたか教えていただけないでしょうか。
161
+ 長々と書いてしまいましたが、以下2点についてご存知の方か教えていただけないでしょうか。
162
+
163
+
164
+
165
+ ①:Pk(またはid)を用いて一意のデータを取得する方法
166
+
167
+ ②:①で取得したデータを文字列でLINEに返す方法(そのための変換・取り出し方法)
168
+
169
+ 返信例:「これは <ブログ1> の記事です。カテゴリは <笑い系> です。URLは<URL>です」
170
+
171
+ ※<>内はデータベースから取得した値。
172
+
173
+
174
+
175
+ よろしくお願いいたします。

1

補足追加

2020/12/10 14:43

投稿

exnjinia
exnjinia

スコア15

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- python(django)をherokuで動かしています。
5
+ python(django)をherokuで動かしています。
6
6
 
7
+ ・LINE Messaging APIを使用し、最後はLINEに返信するLINE BOTを作成しています。
8
+
7
- データベースから値を取得したいのですが、QuerySetを取得した後、それを値として返すことができずに困っています。
9
+ データベースから値を取得したいのですが、QuerySetを取得した後、それを値として返すことができずに困っています。
8
10
 
9
11
 
10
12
 
@@ -37,6 +39,10 @@
37
39
 
38
40
 
39
41
  このモデル中で、今回はarticle_name(ブログの記事名を格納)を取得したいと考えています。
42
+
43
+ 「あ」でも「1」でも「わわわわわ」でも、言葉はなんでもいいので、とにかくLINEに文字を入力して送信するとブログの記事名が返ってくるBOTです。
44
+
45
+
40
46
 
41
47
 
42
48
 
@@ -78,17 +84,21 @@
78
84
 
79
85
 
80
86
 
87
+ LINE BOTなので、resultの値をLINEに返却します。
88
+
89
+
90
+
81
- このとき、reslutの結果は
91
+ このとき、LINEから適当な文字を入力すると、reslutの結果として、LINEに
82
92
 
83
93
  <QuerySet[]>
84
94
 
85
- 表示されます。
95
+ いう返信がきます。
86
96
 
87
97
 
88
98
 
89
- データベース自体にはつながっていると思うので、このQuerysetからデータ(article_name)を取り出したいのですが、うまくいきません。
99
+ データベース自体にはつながっていると思うので、このQuerysetからarticle_name(ブログの記事名)を取り出したいのですが、うまくいきません。
90
100
 
91
- 調べた限りでいくつかの方法を試してみましたが、値を取得することができません。
101
+ 調べた限りで以下のいくつかの方法を試してみましたが、値を取得することができません。(既読だけついて何も返信がなく終了します)
92
102
 
93
103
 
94
104
 
@@ -142,11 +152,15 @@
142
152
 
143
153
 
144
154
 
155
+ ①〜④いずれもLINEに何も返ってこない(=既読だけがついて返信がない)という状態です。
145
156
 
146
157
 
147
- なお、次のコードで試すと、想定通りの動作(1からデータ登録件数の間のランダムな数値が返却される)はしています。
148
158
 
159
+ ローカル環境でprintデバッグをしたところ、コンソールにarticle_nameの値が表示されたのですが、heroku上で動かすとダメです。
160
+
161
+
162
+
149
- やはり正常にデータベースにはつながっているとうのですが、値取り出、リターンることができません
163
+ なお、次のコードで試すと、1からデータ登録件数の間のランダム数値LINEに表示されると想定通り動作をしてくれます。
150
164
 
151
165
 
152
166
 
@@ -174,4 +188,12 @@
174
188
 
175
189
 
176
190
 
191
+ ①〜④のコードを
192
+
193
+ setnum = random.randint(1, int(num))
194
+
195
+ の後に入れ込むとLINEに何も返事が返ってこない(既読がつくだけで終了)ことから、①〜④のコードが原因でheroku上でコケてエラーになってしまっていることは想定できるのですが、解決方法がわからずにいます。
196
+
197
+
198
+
177
- どなたか値取得の教えていただけないでしょうか。
199
+ どなたか教えていただけないでしょうか。