python - 如何从 Django Rest Framework 序列化程序返回不同时区的 DateTime
问题描述
DateTimeField
在 Django Rest Framework 中使用任意时区返回某些 Django 模型的 pythonic 方式是什么?
目前,我的视图以 UTC 格式返回 DateTime,因为据我所知,Django 将时区感知的日期时间存储为 UTC 时区中的日期时间。
楷模:
class TimezoneMixin(models.Model):
TIMEZONES = [(i, i) for i in country_timezones['ru']]
timezone = models.CharField(choices=TIMEZONES, ...)
class Meta:
abstract = True
def get_timezone(self):
if self.timezone:
return timezone(self.timezone)
return get_current_timezone()
class Organization(TimezoneMixin, models.Model):
...
class Event(models.Model):
organization = models.ForeignKey(Organization, ...)
date_created = models.DateTimeField(auto_now_add=True, ...)
...
序列化器:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('organization', 'date_created', ...)
在 ViewSet 中,我按如下方式填充数据
organization_id = ... # Some logic to get required organization_id
data = {
'date_created': timezone.now(), # django.utils.timezone
'organization': organization_id,
...
}
serializer = EventSerializer(data=data)
if serializer.is_valid():
serializer.save()
response_data = serializer.data.copy()
# Some logic to rename one of the keys in response data
...
return Response(response_data, ...) # rest_framework.response.Response
即使我timezone.now()
用类似的东西替换,timezone.now().astimezone(organization.get_timezone())
我仍然会收到 UTC DateTime 作为响应。
我是否正确,从 解析date_created
字符串,从中response_data
创建 DateTime 对象,转换为不同的时区并在视图末尾再次格式化为字符串不是一个好主意?还有哪些方法?
解决方案
推荐阅读
- java - 无限扩展 Rx Singles 拉链
- powershell - 将结果输出推送到数组
- bash - 是否有任何更短的语法可以使用 bash cd 更改多个目录级别?
- java - Geeting 错误:由于缺少 EmbeddedServletContainerFactory bean,无法启动 EmbeddedWebApplicationContext
- https - HTTPS 服务器上的 ERR_CERT_COMMON_NAME_INVALID 错误
- html - 旋转旋转 div 中的元素
- asp.net-mvc - TagHelper 永远不会在 .NET Core 2.2 中执行
- sql-server - 如何确保使用 SMO 恢复 alla 数据?
- c - 无效影响程序的输出
- javascript - 我如何在 Jest 中等待 React Hook?