質問編集履歴

4

コメントをもらい、エラーが解消したため追記

2019/11/14 14:33

投稿

nonono333
nonono333

スコア5

test CHANGED
File without changes
test CHANGED
@@ -330,26 +330,6 @@
330
330
 
331
331
  ---
332
332
 
333
- File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
334
-
335
- response = get_response(request)
336
-
337
- File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
338
-
339
- response = self.process_exception_by_middleware(e, request)
340
-
341
- File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
342
-
343
- response = wrapped_callback(request, *callback_args, **callback_kwargs)
344
-
345
- File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\views\generic\base.py", line 71, in view
346
-
347
- return self.dispatch(request, *args, **kwargs)
348
-
349
- File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
350
-
351
- return handler(request, *args, **kwargs)
352
-
353
333
  File "D:\01_勉強用\03_python\work\webapp\appsite\views.py", line 39, in post
354
334
 
355
335
  obj.save()
@@ -455,3 +435,71 @@
455
435
  こちらで入力方法を制限したく、**bootstrap-datetimepicker**を使用しました。
456
436
 
457
437
  その際はこちらを参考[リンク](https://intellectual-curiosity.tokyo/2018/11/09/djangoでdatepicker%EF%BC%88カレンダーによる日時入力%EF%BC%89を使用する/)に時刻を入力する形にしました。
438
+
439
+
440
+
441
+
442
+
443
+ ###追記(日時のフォーマットに従っていないこと)
444
+
445
+ >
446
+
447
+ >日時のフォーマットに従っていないことが原因であると考えられます。
448
+
449
+
450
+
451
+ 上記指摘をいただき、日次が入る個所を一つ一つコメントアウトして実行してみましたところ、下記の個所をコメントアウトするとエラーが起こらず、無事に更新されました。
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+ ```veiw
460
+
461
+ #obj.time = datetime.now().time()
462
+
463
+
464
+
465
+ ```
466
+
467
+
468
+
469
+ ```model
470
+
471
+ #time = models.DateTimeField(verbose_name="更新時間")
472
+
473
+ ```
474
+
475
+ また下記のように修正し実行すると問題なく更新されました。
476
+
477
+ ```veiw
478
+
479
+ obj.time = datetime.now().time()
480
+
481
+
482
+
483
+ ```
484
+
485
+
486
+
487
+ ```model
488
+
489
+ time = models.TimeField(verbose_name="更新時間")
490
+
491
+   #Dateを削除
492
+
493
+ ```
494
+
495
+ 上記の結果から考えますと
496
+
497
+ Datetime型が入るべきところにtime型が入ろうとしていてためTypwerrorとり、
498
+
499
+ time型に修正したらエラーが起きなくなったと考えています。
500
+
501
+
502
+
503
+ 最初に挙げていた抜粋のソースがエラーの原因ではなく、違う箇所が原因のようでした。
504
+
505
+ 回答のために読んでいただいたのに見当違いの個所を記載してしまい、申し訳ありません。

3

コードの追記

2019/11/14 14:33

投稿

nonono333
nonono333

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- python,djangoで退時間を管理するアプリを作りたいと思っています。
3
+ python,djangoで退時間を管理するアプリを作りたいと思っています。
4
4
 
5
5
  %H:%M:%Sの形で入力して、それを反映し管理アプリです。
6
6
 
@@ -36,13 +36,57 @@
36
36
 
37
37
  ```model
38
38
 
39
+ from django.db import models
40
+
41
+ from django.contrib.auth import get_user_model
42
+
43
+ from django.contrib.auth.models import User
44
+
45
+ #import datetime as dt
46
+
47
+ from django.utils import timezone
48
+
49
+ # Create your models here.
50
+
39
51
  class SubmitAppsite(models.Model):
40
52
 
41
53
  class Meta:
42
54
 
43
55
  db_table = 'appsite'
44
56
 
57
+ STATE = (
58
+
59
+ (1, '正常'),
60
+
61
+ (2, '遅刻'),
62
+
63
+ (3, '欠勤'),
64
+
65
+ (4, '早退'),
66
+
67
+ (5, '休日'),
68
+
69
+ (6, 'そのほか'),
70
+
71
+ )
72
+
73
+ IN_OUT = (
74
+
75
+ (1, '出勤'),
76
+
77
+ (0, '退勤'),
78
+
79
+ )
80
+
81
+
82
+
83
+ staff = models.ForeignKey(get_user_model(), verbose_name="社員", on_delete=models.CASCADE, default=None)
84
+
45
- in_outtime = models.TimeField(verbose_name="退時間", default=None)
85
+ in_outtime = models.TimeField(verbose_name="退時間", default=None)
86
+
87
+ state = models.IntegerField(verbose_name='状態', choices=STATE, default=None)
88
+
89
+ in_out = models.IntegerField(verbose_name='IN/OUT', choices=IN_OUT, default=None)
46
90
 
47
91
  time = models.DateTimeField(verbose_name="更新時間")
48
92
 
@@ -52,26 +96,104 @@
52
96
 
53
97
  ```view
54
98
 
99
+ from django.shortcuts import render, redirect
100
+
101
+ from django.views import View
102
+
103
+ from django.contrib.auth.mixins import LoginRequiredMixin
104
+
105
+ from .models import SubmitAppsite
106
+
107
+ from .forms import SubmitAppsiteForm
108
+
109
+ from datetime import datetime
110
+
111
+ from django.utils import timezone
112
+
113
+ # Create your views here.
114
+
115
+
116
+
117
+ class IndexView(LoginRequiredMixin, View):
118
+
119
+ def get(self, request):
120
+
121
+ form = SubmitAppsiteForm
122
+
123
+ context = {
124
+
125
+ 'form': form,
126
+
127
+ "user": request.user,
128
+
129
+ }
130
+
131
+ return render(request, 'appsite/index.html', context)
132
+
133
+ index = IndexView.as_view()
134
+
135
+
136
+
137
+
138
+
55
139
  class ResultView(View):
56
140
 
141
+
142
+
57
143
  def post(self, request):
58
144
 
59
145
  form = SubmitAppsiteForm(request.POST)
60
146
 
61
147
  now = datetime.now()
62
148
 
149
+ month = now.month
150
+
151
+ day = now.day
152
+
153
+ hour = now.hour
154
+
155
+ minute = now.minute
156
+
63
157
 
64
158
 
65
159
  obj = form.save(commit=False)
66
160
 
67
161
  obj.in_outtime = request.POST["in_outtime"]
68
162
 
163
+ obj.state = request.POST["state"]
164
+
165
+ obj.in_out = request.POST["in_out"]
166
+
167
+ obj.staff = request.user
168
+
69
169
  obj.date = datetime.now().date()
70
170
 
71
171
  obj.time = datetime.now().time()
72
172
 
73
173
  obj.save()
74
174
 
175
+
176
+
177
+ if request.POST["in_out"] == '1':
178
+
179
+ comment = str(month) + "月" + str(day) +"日" + str(hour) + "時" + str(minute) + "分" + "出勤確認しました。今日も頑張りましょう!"
180
+
181
+ else:
182
+
183
+ comment = str(month) + "月" + str(day) +"日" + str(hour) + "時" + str(minute) + "分" + "退勤確認しました。お疲れ様でした(^-^)!"
184
+
185
+ context = {
186
+
187
+ 'state': SubmitAppsite.STATE[int(obj.state)-1][1],
188
+
189
+ 'comment': comment,
190
+
191
+ }
192
+
193
+ return render(request, 'appsite/result.html', context)
194
+
195
+ result = ResultView.as_view()
196
+
75
197
  ```
76
198
 
77
199
  ```form
@@ -100,7 +222,7 @@
100
222
 
101
223
  {{ form.media }}
102
224
 
103
- <p>退時間:<input type="hidden" name="in_outtime">{{ form.in_outtime }}</p>
225
+ <p>退時間:<input type="hidden" name="in_outtime">{{ form.in_outtime }}</p>
104
226
 
105
227
  <p><input class="btn btn-primary" type="submit" value="更新"></p>
106
228
 
@@ -305,3 +427,31 @@
305
427
 
306
428
 
307
429
  ---
430
+
431
+
432
+
433
+ ###追記(views.pyについて)
434
+
435
+ **上記のveiwをすべて記載しました。**(そのため以前までのものは消えています)
436
+
437
+ またmodelもすべて記載しています、
438
+
439
+
440
+
441
+ >
442
+
443
+ >このファイルはnonono333さんが編集したものでまちがいないでしょうか。
444
+
445
+
446
+
447
+ はい。こちら([リンク](https://qiita.com/TaroNoguchi/items/ed2865a5b492aad9dfb2))を参考に作成し、自身で時刻を入力する機能を追加するのために編集しました。
448
+
449
+
450
+
451
+
452
+
453
+ 入力者によって時刻の入力がバラバラになるのを嫌い、またフォーマットを制限しないとVauleErrorが出たため
454
+
455
+ こちらで入力方法を制限したく、**bootstrap-datetimepicker**を使用しました。
456
+
457
+ その際はこちらを参考[リンク](https://intellectual-curiosity.tokyo/2018/11/09/djangoでdatepicker%EF%BC%88カレンダーによる日時入力%EF%BC%89を使用する/)に時刻を入力する形にしました。

2

エラーの追記

2019/11/12 11:46

投稿

nonono333
nonono333

スコア5

test CHANGED
File without changes
test CHANGED
@@ -190,4 +190,118 @@
190
190
 
191
191
 
192
192
 
193
+ ###追記(このvalueという変数はいったいナニモノ)
194
+
195
+ エラーをすべて下記に追記しました。
196
+
197
+ ただ大変申し訳ありません。
198
+
199
+ valueがいったい何者なのか、私には分かりませんでした。
200
+
201
+ またparse_datetime関数の呼び元のソースがどれに当たるのか、分かりませんでした。
202
+
193
- に必要な情報があれば投稿をお願いす。
203
+ もっと勉強してか質問ようと思す。
204
+
205
+ コメントありがとうございました。
206
+
207
+
208
+
209
+ ---
210
+
211
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
212
+
213
+ response = get_response(request)
214
+
215
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
216
+
217
+ response = self.process_exception_by_middleware(e, request)
218
+
219
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
220
+
221
+ response = wrapped_callback(request, *callback_args, **callback_kwargs)
222
+
223
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\views\generic\base.py", line 71, in view
224
+
225
+ return self.dispatch(request, *args, **kwargs)
226
+
227
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
228
+
229
+ return handler(request, *args, **kwargs)
230
+
231
+ File "D:\01_勉強用\03_python\work\webapp\appsite\views.py", line 39, in post
232
+
233
+ obj.save()
234
+
235
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\base.py", line 741, in save
236
+
237
+ force_update=force_update, update_fields=update_fields)
238
+
239
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\base.py", line 779, in save_base
240
+
241
+ force_update, using, update_fields,
242
+
243
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\base.py", line 870, in _save_table
244
+
245
+ result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
246
+
247
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\base.py", line 908, in _do_insert
248
+
249
+ using=using, raw=raw)
250
+
251
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
252
+
253
+ return getattr(self.get_queryset(), name)(*args, **kwargs)
254
+
255
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\query.py", line 1186, in _insert
256
+
257
+ return query.get_compiler(using=using).execute_sql(return_id)
258
+
259
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1334, in execute_sql
260
+
261
+ for sql, params in self.as_sql():
262
+
263
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1278, in as_sql
264
+
265
+ for obj in self.query.objs
266
+
267
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1278, in <listcomp>
268
+
269
+ for obj in self.query.objs
270
+
271
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1277, in <listcomp>
272
+
273
+ [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
274
+
275
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\sql\compiler.py", line 1218, in prepare_value
276
+
277
+ value = field.get_db_prep_save(value, connection=self.connection)
278
+
279
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 789, in get_db_prep_save
280
+
281
+ return self.get_db_prep_value(value, connection=connection, prepared=False)
282
+
283
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 1431, in get_db_prep_value
284
+
285
+ value = self.get_prep_value(value)
286
+
287
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 1410, in get_prep_value
288
+
289
+ value = super().get_prep_value(value)
290
+
291
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 1270, in get_prep_value
292
+
293
+ return self.to_python(value)
294
+
295
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\db\models\fields\__init__.py", line 1371, in to_python
296
+
297
+ parsed = parse_datetime(value)
298
+
299
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\utils\dateparse.py", line 106, in parse_datetime
300
+
301
+ match = datetime_re.match(value)
302
+
303
+ TypeError: expected string or bytes-like object
304
+
305
+
306
+
307
+ ---

1

エラーとコードの追記

2019/11/11 16:07

投稿

nonono333
nonono333

スコア5

test CHANGED
File without changes
test CHANGED
@@ -122,6 +122,8 @@
122
122
 
123
123
  ```
124
124
 
125
+
126
+
125
127
  ### 補足情報(FW/ツールのバージョンなど)
126
128
 
127
129
  **DBはsqlite。**bootstrap-datetimepickerを使用しています。ソースは抜粋。
@@ -131,3 +133,61 @@
131
133
  form.pyかview.pyで入力した情報を文字列として扱えれば解決できるのかと考え、
132
134
 
133
135
  調べましたが分かりませんでした。
136
+
137
+
138
+
139
+ ###追記(エラーの行が、提示されているコードの中に無い)
140
+
141
+ エラーは下記ようになっていました。
142
+
143
+
144
+
145
+ File "D:\01_勉強用\03_python\work\webapp\myvenv\lib\site-packages\django\utils\dateparse.py", line 106, in parse_datetime
146
+
147
+ match = datetime_re.match(value)
148
+
149
+ TypeError: expected string or bytes-like object
150
+
151
+
152
+
153
+ ```dateparse
154
+
155
+ def parse_datetime(value):
156
+
157
+ match = datetime_re.match(value)
158
+
159
+ if match:
160
+
161
+ kw = match.groupdict()
162
+
163
+ kw['microsecond'] = kw['microsecond'] and kw['microsecond'].ljust(6, '0')
164
+
165
+ tzinfo = kw.pop('tzinfo')
166
+
167
+ if tzinfo == 'Z':
168
+
169
+ tzinfo = utc
170
+
171
+ elif tzinfo is not None:
172
+
173
+ offset_mins = int(tzinfo[-2:]) if len(tzinfo) > 3 else 0
174
+
175
+ offset = 60 * int(tzinfo[1:3]) + offset_mins
176
+
177
+ if tzinfo[0] == '-':
178
+
179
+ offset = -offset
180
+
181
+ tzinfo = get_fixed_timezone(offset)
182
+
183
+ kw = {k: int(v) for k, v in kw.items() if v is not None}
184
+
185
+ kw['tzinfo'] = tzinfo
186
+
187
+ return datetime.datetime(**kw)
188
+
189
+ ```
190
+
191
+
192
+
193
+ さらに必要な情報があれば投稿をお願いしたいです。