model.py
class Form(models.Model):
no = models.IntegerField()
finish_date = models.DateField(blank=True, null=True)
serializers.py
class FormSerializer(serializers.ModelSerializer):
class Meta:
model = Form
fields = '__all__'
如果我尝试:
http http://127.0.0.1:8000/api/forms no=112 "finish_date"=""
它返回错误:
"finish_date": [
"Date has wrong format. Use one of these formats instead: YYYY[-MM[-DD]]."
]
如果我将“finish_date”设置为空,这篇文章就可以工作,而且StringField(blank=True, null=True)
不会得到错误。
如何解决?
5条答案
按热度按时间fxnxkyjh1#
问题是
DateTimeField
当前不支持allow_blank
关键字参数。但是它支持
allow_null
,因此您有两个选择:1.发送前清理数据
擦除
"finish_date": ""
-〉"finish_date": null
**然后 * 发送到服务器如果您使用JavaScript提交表单,可能需要执行以下操作:
1.接收后清理数据
在串行化器中擦除
"finish_date": ""
-〉"finish_date": None
。您可以在
ModelSerializer
上使用.to_internal_value()
方法轻松完成此操作.to_internal_value()
方法在Django Rest Framework Fields API Reference中被大量提及rggaifut2#
现在,在上面的模型中,您有一个DateField,并且DateField接受某些格式,这些格式类似于您发布的错误中显示的格式。
您实际上是将一个空字符串(“”)传递给序列化程序,这不是DateField的有效格式。请尝试不传递“finish_date”参数的Post,我认为它会工作。或者,您可以传递过去的某个默认日期,而不是传递空字符串。
ao218c7q3#
使用以下代码修改序列化程序
zi8p0yeb4#
从
ver. 3x
开始,DJango Rest Framework不提供允许空值的DateField,您不必在有效负载中发送字段或显式设置null
作为字段值,但您不能设置""
空值。为了解决这个问题,我实现了我自己的自定义字段,它是在DRF DateField之上构建的,因此您不必担心对现有要求的妥协!)
用法:
kmpatx3s5#
如果有人遇到此问题并使用javascript客户端发布数据,请尝试将
undefined
作为空白日期发送