【问题标题】:Django does not seem to account for DayLightSavingsDjango 似乎没有考虑夏令时
【发布时间】:2023-04-06 03:21:01
【问题描述】:

在我的模型中,我想在每次保存 UserAnwser 对象时更新 Submission 对象的 last_edited 值。

为此我写了如下代码

from django.utils import timezone
...

class UserAnswer(models.Model):
  answer = models.FloatField()
  question = models.ForeignKey(Question, related_name='answers')
  submission = models.ForeignKey(AssessmentSubmission, related_name='answers')


  #Update submission.last_edited on answer.
  def save(self, *args, **kwargs):
      submission = self.submission
      submission.last_edited = timezone.now
      submission.save()
      super(UserAnswer, self).save(*args, **kwargs)

我在settings.py 文件中设置了正确的时区:

LANGUAGE_CODE = 'nl'
TIME_ZONE = 'Europe/Amsterdam'
USE_I18N = True
USE_L10N = True
USE_TZ = True

但是,每次我更改答案并在我们的 django-rest api 中查找 submit.last_edited 值时,时间都会比实际时间晚 1 小时。就好像时间显示在“夏令时”中,而 DST 处理不正确。 例如,如果我在13:30 编辑答案,我们的api 将返回12:30

由于设置了settings.TIMEZONE,并且我正在使用 django 的 django.utils 时区对象,它应该可以正常工作。

特别是因为管理中显示的时间是正确的,所以它在我们的 API 中的某个地方出错了。然而,我们的序列化程序没有对退出做任何事情,所以我不清楚它哪里出错了。

class AssessmentSubmissionSerializer(serializers.ModelSerializer):
  comments = CommentedItemSerializer(read_only=True, many=True)

  class Meta:
      model = am.AssessmentSubmission
      fields = ('user', 'submission_date', 'start_date', 'last_edited', 'shared_with', 'assessment', 'scores', 'user_answers', 'comments', )

有人能指出我正确的方向吗?

【问题讨论】:

  • CEST 在 UTC 上将是 +2,您已返回 UTC 时间而没有进行时区调整。检查条目在您的数据库中的显示方式,并向我们展示显示时间的相关代码。
  • admin/数据库中的时间是正确的时间!这似乎是 Django-rest-framework 的问题,我已经更新了我的问题 - 感谢您的回复!

标签: django django-timezone


【解决方案1】:

修好了!

感谢 iklinac 的回复,我发现问题出在我们的 Django-rest 框架代码中。

我通过following Ramast his instructions within this question解决了

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 2011-08-14
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2012-07-03
    • 2020-09-12
    相关资源
    最近更新 更多