質問編集履歴

1

文章とタイトルの見直し

2019/01/29 06:33

投稿

sr2460
sr2460

スコア50

test CHANGED
@@ -1 +1 @@
1
- <python,django>同プロジェクトかつ別のアプリケーションをエラーなく表示させたい
1
+ <python,django>別のアプリケーションのclass内関数importしたい
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
 
86
86
 
87
- boardアプリケーションにおいてpollsアプリーケーションに存在するmodels.pyの
87
+ pollsアプリーケーションに存在するmodels.pyの
88
88
 
89
89
 
90
90
 
@@ -98,11 +98,29 @@
98
98
 
99
99
  date_limit = models.DateTimeField('公開期限', default = timezone.now() + timedelta(days=7) )
100
100
 
101
+
102
+
103
+
104
+
105
+ def is_date_limit(self):
106
+
107
+ # まだ公開期限を過ぎていないならTrue
108
+
109
+ now = timezone.now()
110
+
111
+ return now <= self.date_limit
112
+
113
+
114
+
115
+
116
+
117
+
118
+
101
- ```
119
+ ```
102
-
103
-
104
-
120
+
121
+
122
+
105
- question_textを取得して表示し最終的にはdate_limitが最新のものや、date_limitが現在日時を過ぎていないもの全てを表示しようとしています。
123
+ question_textを取得して、別アプリケーションであるboardアプリケーションに表示しようとしています。
106
124
 
107
125
 
108
126
 
@@ -122,6 +140,14 @@
122
140
 
123
141
 
124
142
 
143
+ import sys
144
+
145
+ sys.path.append('../')
146
+
147
+ from polls.models import Question
148
+
149
+
150
+
125
151
  class FormAndListView(FormView, ListView, TemplateResponseMixin):
126
152
 
127
153
  def get(self, request, *args, **kwargs):
@@ -156,7 +182,7 @@
156
182
 
157
183
 
158
184
 
159
- <p><a href="http://localhost:8000/polls/">現在おこなっているアンケート:{% for questions in question %}{{ questions.question_text }}{% endfor %}</a></p>
185
+ <p><a href="http://localhost:8000/polls/">現在投票中のアンケート一覧{% if question.is_date_limit %}{% for questions in question %}{{ questions.question_text }}{% endfor %}{% endif %}</a></p>
160
186
 
161
187
 
162
188
 
@@ -174,7 +200,7 @@
174
200
 
175
201
 
176
202
 
177
- 一番上にquestion_textの内容が表示され、ここまでは問題ありませ
203
+ 一番上にquestion_textの内容が表示され、ここまでは問題ありませでした
178
204
 
179
205
 
180
206
 
@@ -184,49 +210,107 @@
184
210
 
185
211
 
186
212
 
187
- まずはfor文ですべてのリストを表示からフィルターをかけること挑戦しようと思いboard.html
188
-
189
-
190
-
191
- ```
192
-
193
- <p><a href="http://localhost:8000/polls/">現在おこなっているアンケート:{{% for questions in question }}{{ questions.question_text }}{{% endfor %}}</a></p>
194
-
195
- ```
196
-
197
-
198
-
199
- と変更したところ
200
-
201
-
202
-
203
- ```
204
-
205
- 'Question' object is not iterable
206
-
207
-
208
-
209
- ```
210
-
211
- とエラーが出てしまいました。
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
- また、ここを参考に
222
-
223
- [https://stackoverflow.com/questions/17473775/questions-object-is-not-iterable-django](https://stackoverflow.com/questions/17473775/questions-object-is-not-iterable-django)
224
-
225
-
226
-
227
-
228
-
229
-
213
+ しかしさらにboard.htmlを改造し、
214
+
215
+
216
+
217
+ ```
218
+
219
+
220
+
221
+ <p><a href="http://localhost:8000/polls/">現在投票中のアンケート一覧{% if question.is_date_limit %}{% for questions in question %}<li>{{ questions.question_text }}</li>{% endfor %}{% endif %}</a></p>
222
+
223
+
224
+
225
+ ```
226
+
227
+
228
+
229
+ とすると今度は質問が表示されなくなってしまいます。
230
+
231
+ おそらくpollsアプリケーションのmodels.py内にある
232
+
233
+
234
+
235
+ ```
236
+
237
+
238
+
239
+ class Question(models.Model):
240
+
241
+ question_text = models.CharField(max_length=200)
242
+
243
+ pub_date = models.DateTimeField('date published')
244
+
245
+ date_limit = models.DateTimeField('公開期限', default = timezone.now() + timedelta(days=7) )
246
+
247
+
248
+
249
+
250
+
251
+ def is_date_limit(self):
252
+
253
+ # まだ公開期限を過ぎていないならTrue
254
+
255
+ now = timezone.now()
256
+
257
+ return now <= self.date_limit
258
+
259
+
260
+
261
+
262
+
263
+ ```
264
+
265
+
266
+
267
+ class Question(models.Model):内のdef is_date_limit(self):
268
+
269
+ にアクセスできていないことが原因なのだと思います。
270
+
271
+
272
+
273
+
274
+
275
+ boardアプリケーションからpollsアプリケーションのmodel.pyにあるclass Qusetionまでは呼び出せるのですがclass内関数まではimportできないようで、解決のため試行錯誤しております。
276
+
277
+
278
+
279
+ boardアプリケーションのviews.py
280
+
281
+ ```
282
+
283
+ import sys
284
+
285
+ sys.path.append('../')
286
+
287
+ from polls.models import Question ←ここまでは問題ない
288
+
289
+ from polls.models import Question.is_date_limit ←ここがおそらく間違っている
290
+
291
+
292
+
293
+ ```
294
+
295
+
296
+
297
+ エラーメッセージはこのように表示されております
298
+
299
+ ```
300
+
301
+ from polls.models import is_date_limit
302
+
303
+ ImportError: cannot import name 'is_date_limit' from 'polls.models'
304
+
305
+
306
+
307
+ ```
308
+
309
+
310
+
311
+ 同アプリケーション内ならばis_date_limit関数は問題なく動作しているのですがそれを別のアプリケーションでも動作させるにはどうすればよいでしょうか?
312
+
313
+ アドバイスをいただけると幸いです。
230
314
 
231
315
 
232
316