前提・実現したいこと
研修会の申し込みフォームを作っています。
最初に主催者が研修会の題名を作成し、モデルに保存します。
その後主催者が日時を作成し、別のモデルに保存します。
研修会と日時はForeignKeyで紐づいています。
日時のモデルに保存している日時をリストとして表示し、参加申込者に選択してもらいたいと思っています。
表示される日時は研修会ごとになるようにviewsでフィルターした後、formsに渡しています。
発生している問題・エラーメッセージ
参加申込者が日時を選択する際に日時が
主催者が作成した時間とは9時間ずれて表示されてしまいます。
(日本時間ではなく協定世界時で表示されている?)
これを主催者が作成した時間で表示されるようにしたいです。
settings.pyではTIME_ZONE = 'Asia/Tokyo'、USE_TZ = Trueとしています。
該当のソースコード
Python
1# models.py 2class Training(models.Model): 3 title = models.CharField(max_length=150, verbose_name='研修名') 4 owner = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='主催者') 5 6class Training_Date(models.Model): 7 target = models.ForeignKey(Training, on_delete=models.CASCADE, verbose_name='対象研修') 8 training_date = models.DateTimeField(verbose_name='開催日時') 9 10class Apply(models.Model): 11 target = models.ForeignKey(Training, on_delete=models.CASCADE, verbose_name='対象研修') 12 apply_user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='参加者') 13 apply_date = models.ForeignKey(Training_Date, on_delete=models.CASCADE, verbose_name='参加日時')
Python
1# views.py 2class DateSelectView(CreateView): 3 model = Apply 4 form_class = ApplyForm 5 template_name = 'training/apply_form.html' 6 success_url = reverse_lazy('training:index') 7 8 def get(self, request, *args, **kwargs): 9 form_class = self.get_form_class() 10 training = Training(pk=self.kwargs['pk']) 11 training_date = Training_Date.objects.filter(target=training) 12 form = form_class(training_date=training_date) 13 params = { 14 'form': form, 15 } 16 return render(request, self.template_name, params) 17 18 def post(self, request, *args, **kwargs): 19 ...
Python
1# forms.py 2class ApplyForm(forms.ModelForm): 3 class Meta: 4 model = Apply 5 fields = ['apply_date', ] 6 7 def __init__(self, training_date, *args, **kwargs): 8 super(ApplyForm, self).__init__(*args, **kwargs) 9 self.fields['apply_date'].queryset = training_date
HTML
1<!-- apply_form.html --> 2{% extends 'base.html' %} 3{% block body %} 4<h3>研修申し込み</h3> 5<form action="" method="post"> 6 <table>{{ form.as_table }}</table> 7 {% csrf_token %} 8 <button type="submit">送信</button> 9</form> 10{% endblock %}
試したこと
DateSelectViewの段階でreplace(tzinfo=None)としましたが、変わりませんでした。
また、+ datetime.timedelta(hours=9)で9時間足しましたが、変わりませんでした。
あなたの回答
tips
プレビュー