def add_object_definitions(self, method, view):
"""Create an Object definition from serializer
It will create a different definitions depending on the method, definition name is
{serializer class name}_{read|write}
POST, PUT, PATCH is write
GET, DELETE, HEAD is read
write methods will not include read only fields
read methods will not include write only fields
Note that for write methods it will also return a read definition because by default this is the definition
object returned by write methods
:param str method: GET, POST etc
:param rest_framework.generics.GenericAPIView view:
"""
if not hasattr(view, 'get_serializer'):
return None
try:
serializer = view.get_serializer()
except AssertionError: # Default behaviour of GenericAPIView is to raise AssertionError
return None
if method in ('POST', 'PUT', 'PATCH'):
write = True
# also generate a read definition, because it is commonly used as response for write actions
self.add_object_definitions('GET', view)
name = '%s_write' % serializer.__class__.__name__
elif method in ('GET', 'DELETE', 'HEAD'):
write = False
name = '%s_read' % serializer.__class__.__name__
else:
assert False, 'Can not recognize method %s' % method
if name in self.definitions:
return
fields = []
for field in serializer.fields.values():
if isinstance(field, serializers.HiddenField) or write and field.read_only or \
not write and field.write_only:
continue
# required = bool(field.required) # field.required is a list
field = field_to_schema(field)
fields.append(field)
self.definitions[name] = coreschema.Object(title=name, properties=fields)
return self.definitions[name]
rest_framework_schemas.py 文件源码
python
阅读 20
收藏 0
点赞 0
评论 0
评论列表
文章目录