序列化程序中关于DateField格式的错误



我有一个序列化程序,由于日期格式的验证错误,我无法验证数据,尽管我确信日期格式是正确的。我想将该字段保留为可选字段,但在传递日期值时无法使其工作。当我没有传递任何值时,序列化程序就会正常工作。

示例:

from rest_framework.serializers import serializers
class SerializerX(serializers.Serializer):
date_x = serializers.DateField(required=False, allow_null=True, format="%Y-%m-%d", input_formats=["%Y-%m-%d"])
s = SerializerX(data={'date_x': '2022-02-16'})
s.is_valid()
s.initial_data = {'date_x': '2022-02-16T00:00:00'} (before calling is_valid())
s.validated_data = {}
s.data = {'date_x': '2022-02-16T00:00:00'}

在我的本地环境中,序列化程序工作正常,但在远程开发环境(Kubernetes pod(中,会发生以下错误:

Validation error: 
{'date_x': [ErrorDetail(string='Date has wrong format. Use one of these formats instead: YYYY-MM-DD.', code='invalid')]}

注意:环境之间的设置没有差异。

我试过:

  1. 添加DATE_FORMAT="%"Y-%m-%d";和DATE_INPUT_FORMATS=['%Y-%m-%d',]设置并从字段定义中删除格式和INPUT_FORMATS
  2. 添加DATE_FORMAT="%"Y-%m-%d";和DATE_INPUT_FORMATS=['%Y-%m-%d',]到REST_FRAMEWORK设置,并从字段定义中删除格式和INPUT_FORMATS
  3. 覆盖validate((和validate_date_x((等validation_methods
  4. 禁用USE_L10N
  5. 定义自定义DateField类如下:
from django.utils import formats
class DateFieldX(serializers.DateField):
def to_representation(self, obj):
return formats.date_format(obj, 'Y-m-d')

关于环境:

Django 2.1.7
djangorestframework 3.9.2
Python 3.6.14

当前相关设置:

TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

如果有任何帮助,我都将不胜感激。提前感谢

我找到了以下解决方案,其关键方面是:

  • 将字段定义为DateTimeField而不是DateField
  • 确保输入格式始终为字符串
  • 覆盖验证方法以确保DRF始终将值作为字符串进行管理
from rest_framework.serializers import serializers
class SerializerX(serializers.Serializer):
date_x = serializers.DateTimeField(
required=False, allow_null=True,
format="%Y-%m-%d", 
input_formats=["%Y-%m-%dT%H:%M:%S", "%Y-%m-%d"]
)
def validate(self, value):
return value.strftime('%Y-%m-%d') if value else value

s=SerializerX(data={'date_x':'2022-02-16'(

s=SerializerX(data={'date_x':日期时间.strptime('2022-02-16','%Y-%m-%d'(}(

相关内容

  • 没有找到相关文章

最新更新