TIME_ZONE および USE_TZ 設定で日時を保存する私のアプリケーションの大部分は問題ありません。私の質問は、UTC の日時でモデルを保存するにはどうすればよいですか?ユーザーが入力したタイムゾーンに戻す変換が正しいように日時が設定されていますか? 以下に示すモデル、ビュー、フォーム、およびhtml。このコードは、settings.py ファイルで USE_TZ = False の場合に機能しますが、プロジェクト内の他のすべてのタイムゾーンを保持したいと考えています。
モデル:
class TZTestModel(models.Model):
timezone = TimeZoneField()
dt = models.DateTimeField()
意見:
class TZTestView(LoginRequiredMixin, TemplateView):
template_name = "tz_test.html"
def get_context_data(self, **kwargs):
return {
'form': self.form
}
def dispatch(self, request, *args, **kwargs):
self.form = TZTestForm(self.request.POST or None)
return super(TZTestView, self).dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
if self.form.is_valid():
self.form.save()
return self.render_to_response(self.get_context_data())
形:
class TZTestForm(forms.ModelForm):
class Meta:
model = TZTestModel
def clean(self):
timezone = self.cleaned_data['timezone']
dt = self.cleaned_data['dt']
dt = timezone.localize(dt)
self.cleaned_data['dt'] = pytz.UTC.normalize(dt.astimezone(pytz.UTC))
return self.cleaned_data
テンプレート:
<html>
<body>
<form method="post">
{% csrf_token %}
{{ form }}
<input type="submit">
</form>
</body>
</html>
例:
「US/Alaska」のタイムゾーンと今日の 13:00 の日時を入力し、それを UTC 値として保存してから、「US/Alaska」に変換して正しい値を取得できるようにしたいと考えています。 .
基本的に、あるモデルの日時をアプリケーションとは異なるタイムゾーンに保存しようとしています。タイムゾーンは、日時が指定されているのと同じ形式でユーザーによって指定されています。