【问题标题】:I can not change the date format in django drf我无法更改 django drf 中的日期格式
【发布时间】:2018-11-12 14:36:06
【问题描述】:

我有包含 DateField 的 drf 模型。该字段默认格式是“YYYY-MM-DD”只是我想转换“DD-MM-YYYY”怎么可能。

from rest_framework import serializers
from.models import SpaUser
from djoser.serializers import UserCreateSerializer as BaseUserRegistrationSerializer
import datetime
from rest_framework.settings import api_settings



class SpaUserSerializer(serializers.ModelSerializer):

    date_joined = serializers.ReadOnlyField()
    birthdate = serializers.DateField(format="%d-%m-%Y", input_formats=['%d-%m-%Y',])

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    如果它是通用的,请在您的设置文件中添加 "DATE_INPUT_FORMATS"REST_FRAMEWORK 设置,如:

    REST_FRAMEWORK = {
        "DATE_INPUT_FORMATS": ["%d-%m-%Y"],
        ...
    }
    

    更多详情请查看http://www.django-rest-framework.org/api-guide/settings/#date-and-time-formatting

    【讨论】:

    • 谢谢。这是我的错误“日期格式错误。请改用以下格式之一:%、d、-、%、m、-、%、Y。”
    【解决方案2】:

    要让它正常工作,input_formats 是您需要分配所需格式的参数,format 是输出格式

    birthdate = serializers.DateField(input_formats=['%d-%m-%Y',])
    

    或者您可以在设置中设置默认输入格式

    DATE_INPUT_FORMATS = [
        ("%d-%m-%Y"),
    ]
    

    【讨论】:

    • 不幸的是,我仍然有这个错误:“生日”:[“日期格式错误。请改用以下格式之一:YYYY[-MM[-DD]]。” ]
    • 我真的什么都试过了。我被卡住已经超过 48 小时了
    • 请帮帮我。谢谢你
    • 对我来说太棒了。我想知道如何将时间也包括在内?
    【解决方案3】:

    通过结合您的所有解决方案,它可以工作

    REST_FRAMEWORK = {
        # "DATE_INPUT_FORMATS": "%d-%m-%Y", doesn't works
        'DATE_INPUT_FORMATS': [("%d-%m-%Y"),],it works
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        ),
    }
    

    【讨论】:

    • ("%d-%m-%Y")"%d-%m-%Y" 相同,>>> (1)==1 返回 True
    【解决方案4】:

    来自关于 DateField 的 DRF 文档

    格式字符串可以是 Python strftime 明确的格式 指定格式或特殊字符串“iso-8601”,它表示 应使用 ISO 8601 样式的日期。 (例如“2013-01-29”)

    所以在你的情况下格式应该是

    format="%d-%m-%Y"
    

    【讨论】:

    • 不幸的是,我仍然有这个错误:“生日”:[“日期格式错误。请改用以下格式之一:YYYY[-MM[-DD]]。” ]
    • 我真的什么都试过了。我被卡住已经超过 48 小时了
    • 请帮帮我。
    • Flexi 为什么你的问题被删除我需要那个问题的答案
    【解决方案5】:

    虽然这个帖子很老了,但我在尝试解决类似问题时发现了它。虽然回复并没有给我完整的答案,但他们确实促使我简单地阅读 DRF 关于该主题的非常有用的文档:

    https://www.django-rest-framework.org/api-guide/settings/#date-and-time-formatting

    就我而言,我正在使用 Vuetify 的 v-calendar、Vue JS 和 DRF 构建一个活动日历。 v-calendar 需要格式 YYYY-MM-DD HH:MM,并且首选字符串。我可以简单地将字符串存储在我的数据库中,但我更喜欢以原生 Python 格式存储日期时间字段,以便在需要时进行服务器端处理。因此,在我的 settings.py 文件中,我将以下内容添加到我的 REST_FRAMEWORK 设置中:

    'DATETIME_INPUT_FORMATS': ['%Y-%m-%d %H:%M',],
    'DATETIME_FORMAT': '%Y-%m-%d %H:%M',
    

    第一个接受一个列表(因此是括号和逗号),第二个只接受一个字符串。然后,在我的序列化程序中,我使用:

    start = serializers.DateTimeField()

    在前端,我将日期作为字符串对象,将它们传递给日历进行显示,然后它就可以工作了。在 POST 数据时,我只是将它们以相同的字符串格式传回,然后 DRF 序列化程序将它们编码为原生 Python 进行存储。

    【讨论】:

      【解决方案6】:

      在 settings.py 中包括:

      REST_FRAMEWORK = {  
          'DATE_FORMAT': '%d-%m-%Y'
      }
      

      【讨论】:

        【解决方案7】:

        我们必须区分所有这些:

        1. DATE_INPUT_FORMATS

          POST请求API中的输入指定日期格式。

        2. DATETIME_FORMAT

          为序列化数据指定日期时间格式,如GET 请求。

        3. DATE_FORMAT

          指定序列化数据的日期格式,如GET 请求。

        这是如何在settings.py 文件中使用这些设置的示例。

        REST_FRAMEWORK = {
            'DATE_INPUT_FORMATS': ["%Y-%m-%d %H", ],
            'DATETIME_FORMAT': '%Y-%m-%d %H',
            'DATE_FORMAT': '%Y-%m-%d %H'
        }
        
        

        注意:如果您希望序列化程序具有相同的数据或 DateTime 格式,则应使用这些设置。

        但是,如果您在某些字段中发生了更改,您可以更改该字段的 format,下面是一个如何执行此操作的示例:

        class YourSerializer(serializers.ModelSerializer):
            ...
            def to_representation(self, instance):
                representation = super(YourSerializer, self).to_representation(instance)
                representation['created_at'] = instance.created_at.strftime('%Y-%m-%d %H)
                return representation
        
        

        或者类似的方式

        class YourSerializer(serializers.ModelSerializer):
            created_at = serializers.DateTimeField(format='%Y-%m-%d %H')
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          相关资源
          最近更新 更多