- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:django-rest-framework 3.7中将此行为识别为错误并已解决。现在,序列化程序将根据服务器的时区一致地显示时间:https://github.com/tomchristie/django-rest-framework/issues/3732#issuecomment-267635612
我有一个Django项目,我希望用户位于某个时区。我的设置中有TIME_ZONE = 'Asia/Kolkata'
和USE_TZ = True
。
我有一个包含datetimefield的模型。当我第一次创建对象时,Modelerializer会给日期时间加上尾随的+5:30
。令人讨厌的是,带有auto_now_add=True
的datetimes给UTC日期时间带有尾随的Z
。我通过将字段的默认值设置为当前时间的可调用项来解决此问题。
如果我在任何时候再次序列化该对象,则所有日期时间都以UTC开头,并带有尾随Z
。从Django文档中,我希望序列化程序使用当前时区,该时区默认为TIME_ZONE = 'Asia/Kolkata'
设置的默认时区。我已经使用get_current_timezone_name()
在我的 View 中检查了当前时区,它是'Asia/Kolkata'
。我什至尝试过在自己的 View 中使用activate('Asia/Kolkata')
,但时间仍以UTC返回。
请注意,所有时间都是正确的(UTC时间早5:30小时),这正是我希望转换的时间。所有日期时间都按照预期的UTC时间存储在数据库中。
最佳答案
在这里查看文档:http://www.django-rest-framework.org/api-guide/fields/#datetimefield
Signature: DateTimeField(format=None, input_formats=None)
format - A string representing the output format. If not specified, this defaults to the same value as the DATETIME_FORMAT settings key, which will be 'iso-8601' unless set. Setting to a format string indicates that to_representation return values should be coerced to string output. Format strings are described below. Setting this value to None indicates that Python datetime objects should be returned by to_representation. In this case the datetime encoding will be determined by the renderer.
When a value of None is used for the format datetime objects will be returned by to_representation and the final output representation will determined by the renderer class.
In the case of JSON this means the default datetime representation uses the ECMA 262 date time string specification. This is a subset of ISO 8601 which uses millisecond precision, and includes the 'Z' suffix for the UTC timezone, for example: 2013-01-29T12:34:56.123Z.
data
kwarg调用序列化程序,如果您使用 ListView 或详细信息 View ,则不会发生。
serializer.data
。在
创建/更新操作的情况下,这将是
serializer.validated_data
的表示形式,而在
列表/详细信息操作的情况下,它将是实例的直接表示形式。
field.to_representation
调用
format=None
来实现表示,这将使该字段返回纯字符串值。
isoformat()
方法将其转换为字符串,并按原样返回。 isoformat()
方法将其转换为字符串,但DRF将+00:00
替换为Z
(请参见上面的链接)。 format=None
或自定义strftime字符串传递给序列化器中的DateTimeField。但是,您将始终使用
+00:00
来获取UTC时间,因为(幸运地)这就是存储数据的时间。
'Asia/Kolkata'
的实际偏移量,则可能必须定义自己的
DateTimeField
:
from django.utils import timezone
class CustomDateTimeField(serializers.DateTimeField):
def to_representation(self, value):
tz = timezone.get_default_timezone()
# timezone.localtime() defaults to the current tz, you only
# need the `tz` arg if the current tz != default tz
value = timezone.localtime(value, timezone=tz)
# py3 notation below, for py2 do:
# return super(CustomDateTimeField, self).to_representation(value)
return super().to_representation(value)
关于DjangoRestFramework ModelSerializer DateTimeField仅在创建对象时转换为当前时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275588/
之间自动跳转
到目前为止我有 -> 序列化器: class UserSerializer(serializers.ModelSerializer): """Serializer to map the mod
更新:django-rest-framework 3.7中将此行为识别为错误并已解决。现在,序列化程序将根据服务器的时区一致地显示时间:https://github.com/tomchristie/d
使用 DRF+Ajax+bootstrap 构建一个不需要应用程序的网站是否值得,还是坚持使用普通的 django 模板语言甚至不需要 Ajax 更好?我想避免使用 Angular ,因为我不希望事情
我正在开发一个 API(使用 DjangoRestFramework),我希望用户能够加载其项目列表,但我只想从数据库加载几列(比如说 ID、标题、类别、假设他们访问的 URL 是 api/items
我在 Django Rest Framework 2 中有这些嵌套的序列化程序: class BookingSerializer(Serializer): reservation_histor
这是我的模型: class Post(models.Model): user = models.ForeignKey(User) post = models.CharField(max
我的模型是这样的: class Post(models.Model): user = models.ForeignKey(User) post = models.CharField(m
我想在 django 应用程序中使用 DjangoRestframework 但调用它时出现错误? 打电话时,我给我回复: Exception Type: AssertionError Excepti
基本上,我想从 ModelSerializer 的相关字段中过滤掉不事件的用户。我试过 Dynamically limiting queryset of related field以及以下内容: cl
我正在尝试使用 django rest_framework_jwt。我可以让它生成一个 token ,但是当我尝试将其在 header 中发送到 protected View 时,我得到“未提供身份验
我的包裹: djangorestframework==3.2.5 django-filter==0.11.0 djangorestframework-filters==0.5.0 我正在使用 djan
我正在使用默认的 User 模型,并且还使用 UserExtended 模型对其进行了扩展: class Country(models.Model): countryName = models
我正在尝试序列化多个查询集,但我注意到只有其中一个查询集被序列化。这是我目前正在尝试的方法。 class GetDetails(APIView): def get(self, reques
我发现有一个 PostgreSQL 的模型框架: from sqlalchemy import Column, Integer, String from sqlalchemy.orm import c
我这几天一直在看这个,我要拔掉我的头发,所以任何帮助都将不胜感激。 我有一个名为 package 的简单模型,它有一个 userFrom 和 userTo class Package(models.M
我拥有对 SQL 旧版数据库的读取访问权限。假设在数据库中我有两个表:Treatment 和 TreatmentType。在治疗表中,我有病人ID (int)、日期(文本)、治疗类型(int)。在Tr
我正在尝试在 Apache 中运行 Django 项目 (Mayan EDMS)。来自 Ubuntu 12.10、Apache 2.2.22、Python 2.7.3 和 Django(1、4、3、'
我今天遇到了一个非常奇怪的问题。 这是我的序列化器类。 class Connectivity(serializers.Serializer): device_type = serialize
本文为 djangorestframework-simplejwt 使用记录。(官方文档) 1. 安装 pip install djangorestframework
我正在 Django 中开发一个讨论应用程序,它包含主题、帖子、回复和投票。投票使用 Generic Foreign Keys and Content Types以确保用户只能对特定主题/帖子/回复投
我是一名优秀的程序员,十分优秀!