Django Rest Framework 中 TimeField 输入输出格式的正确方式是什么?

4

models.py

class DemoA(models.Model):
    my_time = models.TimeField()

serializers.py

class DemoASerializer(serializer.ModelSerializer):
    class Meta:
        model = DemoA
        fields = ('my_time', )

默认情况下,对于my_time字段,它给出的格式是10:30:00(%H:%M:%S)。我想要的序列化格式是10:30(%H:%M)。

是否有一种默认的方式来指定这种情况的格式,比如在序列化器Meta中指定extra_kwargs

2个回答

6
您可以通过指定 TimeField [drf-doc] (这不是 Django 模型中的TimeField [Django-doc])来指定字段如何格式化数据:
class DemoASerializer(serializers.ModelSerializer):

    <b>my_time = serializers.TimeField(format='%H:%M')</b>

    class Meta:
        model = DemoA
        fields = ('my_time', )

或者使用extra_kwargs[drf-doc]:
class DemoASerializer(serializers.ModelSerializer):

    class Meta:
        model = DemoA
        fields = ('my_time', )
        extra_kwargs = {<b>'my_time': {'format': '%H:%M'}</b>}

1
是的,那个完美地奏效了。不过我还在想,除了在序列化器中覆盖该字段之外,是否有其他指定方法,比如可以在 extra_kwargs 中指定? - Rakmo
1
@OmkarDeshpande:通常情况下,编辑后的解决方案也应该能够正常工作。 - Willem Van Onsem
1
很棒,成功了 :) 谢谢 - Rakmo

2

在序列化器上设置格式是可行的,但在大规模应用中可能会成为反模式,因为您需要将其添加到整个应用程序中所有序列化器上。 DRF 允许您在设置中设置它作为应用程序的默认格式。您可以设置它,并仅在需要时在序列化器上覆盖格式。

“最初的回答”

REST_FRAMEWORK = {
   ... # your other stuff
   'TIME_INPUT_FORMATS': ('%H:%M', )
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接