I want to post JSON request with field date
:
{
"date":"2015-02-11T00:00:00.000Z"
}
It's the string is automatically converted from Date
object and I don't want to crop the part T00:00:00.000Z
manually at frontend.
But if I post such request, Django Rest Framework validator of DateField will say me, that date has invalid format.
My model:
class Event(models.Model):
name = models.CharField('Name', max_length=40, blank=True, null=True)
date = models.DateField('Date', blank=True, null=True)
My serializer:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('id', 'name', 'date')
What is the right way to solve this problem?
You can modify your date field in your serializer with a different format (different from the default one, which you are using implicitly).
More info:
https://www.django-rest-framework.org/api-guide/fields/#datefield
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
from rest_framework import serializers, fields
class EventSerializer(serializers.ModelSerializer):
date = fields.DateField(input_formats=['%Y-%m-%dT%H:%M:%S.%fZ'])
class Meta:
model = Event
fields = ('id', 'name', 'date')
Note that if you need to parse timestamps other than in UTC (Z at the end of your timestamp), you will need to customize DateField
a bit more.
As @nitrovatter mentioned in the comments, the date input formats can also be configured in the settings to affect every serializer by default. For example:
REST_FRAMEWORK = {
'DATE_INPUT_FORMATS': ['iso-8601', '%Y-%m-%dT%H:%M:%S.%fZ'],
}