File tree Expand file tree Collapse file tree 3 files changed +49
-3
lines changed Expand file tree Collapse file tree 3 files changed +49
-3
lines changed Original file line number Diff line number Diff line change @@ -254,14 +254,26 @@ def _map_field(self, field):
254254 'type' : 'array' ,
255255 }
256256
257+ # DateField and DateTimeField type is string
258+ if isinstance (field , serializers .DateField ):
259+ return {
260+ 'type' : 'string' ,
261+ 'format' : 'date' ,
262+ }
263+
264+ if isinstance (field , serializers .DateTimeField ):
265+ return {
266+ 'type' : 'string' ,
267+ 'format' : 'date-time' ,
268+ }
269+
257270 # Simplest cases, default to 'string' type:
258271 FIELD_CLASS_SCHEMA_TYPE = {
259272 serializers .BooleanField : 'boolean' ,
260273 serializers .DecimalField : 'number' ,
261274 serializers .FloatField : 'number' ,
262275 serializers .IntegerField : 'integer' ,
263- serializers .DateField : 'date' ,
264- serializers .DateTimeField : 'date-time' ,
276+
265277 serializers .JSONField : 'object' ,
266278 serializers .DictField : 'object' ,
267279 }
Original file line number Diff line number Diff line change @@ -196,3 +196,20 @@ def test_schema_construction(self):
196196
197197 assert 'openapi' in schema
198198 assert 'paths' in schema
199+
200+ def test_serializer_datefield (self ):
201+ patterns = [
202+ url (r'^example/?$' , views .ExampleGenericViewSet .as_view ({"get" : "get" })),
203+ ]
204+ generator = SchemaGenerator (patterns = patterns )
205+
206+ request = create_request ('/' )
207+ schema = generator .get_schema (request = request )
208+
209+ response = schema ['paths' ]['/example/' ]['get' ]['responses' ]
210+ response_schema = response ['200' ]['content' ]['application/json' ]['schema' ]['properties' ]
211+
212+ assert response_schema ['date' ]['type' ] == response_schema ['datetime' ]['type' ] == 'string'
213+
214+ assert response_schema ['date' ]['format' ] == 'date'
215+ assert response_schema ['datetime' ]['format' ] == 'date-time'
Original file line number Diff line number Diff line change 1- from rest_framework import permissions
1+ from rest_framework import permissions , serializers
2+ from rest_framework .response import Response
23from rest_framework .views import APIView
4+ from rest_framework .viewsets import GenericViewSet
35
46
57class ExampleListView (APIView ):
@@ -17,3 +19,18 @@ class ExampleDetailView(APIView):
1719
1820 def get (self , * args , ** kwargs ):
1921 pass
22+
23+
24+ class ExampleGenericViewSet (GenericViewSet ):
25+ class ExampleSerializer (serializers .Serializer ):
26+ date = serializers .DateField ()
27+ datetime = serializers .DateTimeField ()
28+
29+ serializer_class = ExampleSerializer
30+
31+ def get (self , * args , ** kwargs ):
32+ from datetime import datetime
33+ now = datetime .now ()
34+
35+ serializer = self .get_serializer (data = now .date (), datetime = now )
36+ return Response (serializer .data )
You can’t perform that action at this time.
0 commit comments