Search code examples
djangodjango-modelsserializationdjango-rest-framework

django-rest-framework web interface is showing datetime in this format DD-MM-YY --:-- --


When I send a post request from drf web interface I am getting this error - "Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm:ss.uuuuuu[+HHMM|-HHMM]."

This is my code

models.py

from django.db import models
from UserAuthenticator.models import User


class UserInsuranceModel(models.Model):
    customer_name = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    insurance_id = models.CharField(max_length=100, unique=True)
    vehicle_number = models.CharField(max_length=100, unique=True)
    rc_front = models.ImageField(upload_to="media", null=False, blank=False)
    rc_back = models.ImageField(upload_to="media", null=True, blank=True)
    nominee_name = models.CharField(max_length=100)
    nominee_dob = models.DateField(null=True, blank=True)
    insurance_created_at = models.DateTimeField(auto_created=True)
    insurance_started_at = models.DateTimeField(null=True)
    insurance_valid_till = models.DateTimeField(null=True)
    is_insurance_verified = models.BooleanField(default=False)
    is_insurance_cancelled = models.BooleanField(default=False)

    def __str__(self):
        return str(self.customer_name)`

serializer.py

from rest_framework import serializers
from .models import UserInsuranceModel
from UserAuthenticator.models import User


class UserInsuranceSerializer(serializers.ModelSerializer):
    insurance_started_at = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S.%fZ")
    insurance_valid_till = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S.%fZ")

    class Meta:
        model = UserInsuranceModel
        fields = ('customer_name', 'insurance_id', 'vehicle_number', 'rc_front', 'rc_back', 'nominee_name',
                  'nominee_dob', 'insurance_created_at', 'insurance_started_at', 'insurance_valid_till'
                  'is_insurance_verified', 'is_insurance_cancelled')`

views.py

from rest_framework import generics, status
from .models import UserInsuranceModel
from .serializer import UserInsuranceSerializer
from rest_framework.views import Response

class UserInsuranceApiView(generics.CreateAPIView):
    queryset = UserInsuranceModel.objects.all()
    serializer_class = UserInsuranceSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('new-insurance/', views.UserInsuranceApiView.as_view(), name='new-insurance'),
]

I have tried all the resources on the internet, but none of them worked for me. So, I am posting here, and if anyone can help, it will be appreciated. Thank you in advance


Solution

  • In your serialiser you are specifying Z which I assume means time in UTC. try replacing those lines with these.

    insurance_started_at = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S.%f")
        insurance_valid_till = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S.%f")