【问题标题】:Setting all DateTime fields to output microseconds将所有 DateTime 字段设置为输出微秒
【发布时间】:2015-09-17 17:17:55
【问题描述】:

我正在使用 django rest 框架编写一个 API,并且我有一个包含日期时间字段的模型。

在某些情况下,一个字段会关联微秒,而另一个字段则不会,最好的例子是 createdstart 字段。 这是从 API 返回的字段的样子:

created: "2015-09-17T16:30:50.732176Z"
start: "2015-09-03T06:10:00Z"

如您所见,微秒包含在 created 中,但不包含在 start 中。我可以在 django rest 框架中设置一个允许两个字符串的格式相同的设置吗?这样这些的输出将是:

created: "2015-09-17T16:30:50.732176Z"
start: "2015-09-03T06:10:00.000000Z"

【问题讨论】:

  • 您是否尝试过添加格式参数?见:django-rest-framework.org/api-guide/fields/#datetimefield
  • 我已经看过了,但我希望它影响项目中的所有日期时间字段,因此我不必单独将其添加到每个字段中。
  • 你考虑过继承serializers吗?
  • 不,我没有,你能解释一下吗?

标签: python django api django-rest-framework


【解决方案1】:

由于您不想为每个 serializers.DateTimeField() 传递格式选项,因此请查看可能的子类化 serializers.DateTimeField()。

请看下面的例子:

class Foo(object):
    def __init__(self, bar='baz'):
        self.bar = bar
        self.gub = 'gub'

class Footwo(Foo):
    def __init__(self):
        super(Footwo, self).__init__()
        self.bar='jib'


f = Foo()
ftwo = Footwo()
f.bar
ftwo.bar

这将打印“baz”,然后是“jib”。所以这个逻辑应该适用于 serializers.DateTimeField() 与以下内容接近:

class FormattedDateTimeField(serializers.DateTimeField):
    def __init__(self):
        super(FormattedDateTimeField, self).__init__()
        self.format = 'My datetime format I want in all subclasses'

资源:

Subclassing with init args

Python strtime format variables to use in your format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多