Updated the README and the mixing to provide better asserts.
All checks were successful
StarFields Django Rest Framework Generics / build (push) Successful in 36s
All checks were successful
StarFields Django Rest Framework Generics / build (push) Successful in 36s
This commit is contained in:
@@ -123,8 +123,24 @@ class CachedListCreateModelMixin(CacheDeleteMixin):
|
||||
headers=headers)
|
||||
|
||||
def perform_create(self, serializer):
|
||||
" Generic save hook "
|
||||
serializer.save()
|
||||
"""
|
||||
Uses serializer.create instead of serializer.save to avoid making a
|
||||
query. We save the returned instance list to the serializer in order to
|
||||
be used as serializer.data during rendering
|
||||
"""
|
||||
assert hasattr(serializer, 'create'), (
|
||||
f'Cannot call .create() on serializer {serializer.__class__} as'
|
||||
' no such attribute exists.'
|
||||
)
|
||||
validated_data = serializer.validated_data
|
||||
instance_list = serializer.create(validated_data)
|
||||
# Check whatever you can
|
||||
assert hasattr(instance_list, '__iter__'), (
|
||||
'Method .create() on serializer on serializer '
|
||||
f'{serializer.__class__} should return a list of serializable'
|
||||
' model instances.'
|
||||
)
|
||||
serializer.instance = instance_list
|
||||
|
||||
def get_success_headers(self, data):
|
||||
" Returns extra success headers "
|
||||
@@ -179,9 +195,7 @@ class CachedListUpdateModelMixin(CacheDeleteMixin):
|
||||
" Updates the list of entries in the request "
|
||||
partial = kwargs.pop('partial', False)
|
||||
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
serializer = self.get_serializer(queryset, data=request.data,
|
||||
serializer = self.get_serializer(data=request.data,
|
||||
partial=partial, many=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_update(serializer)
|
||||
@@ -192,8 +206,24 @@ class CachedListUpdateModelMixin(CacheDeleteMixin):
|
||||
return Response(serializer.data)
|
||||
|
||||
def perform_update(self, serializer):
|
||||
" Generic save hook "
|
||||
serializer.save()
|
||||
"""
|
||||
Uses serializer.update instead of serializer.save to avoid making a
|
||||
query. We save the returned instance list to the serializer in order to
|
||||
be used as serializer.data during rendering
|
||||
"""
|
||||
assert hasattr(serializer, 'update'), (
|
||||
f'Cannot call .update() on serializer {serializer.__class__} as'
|
||||
' no such attribute exists.'
|
||||
)
|
||||
validated_data = serializer.validated_data
|
||||
instance_list = serializer.update(None, validated_data)
|
||||
# Check whatever you can
|
||||
assert hasattr(instance_list, '__iter__'), (
|
||||
'Method .update() on serializer on serializer '
|
||||
f'{serializer.__class__} should return a list of serializable '
|
||||
' model instances.'
|
||||
)
|
||||
serializer.instance = instance_list
|
||||
|
||||
def list_partial_update(self, request, *args, **kwargs):
|
||||
" Needs to be called on partial updates "
|
||||
@@ -211,16 +241,19 @@ class CachedListDestroyModelMixin(CacheDeleteMixin):
|
||||
# Go on with the validation as normal
|
||||
serializer = self.get_serializer(data=request.data, many=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
validated_data = serializer.validated_data
|
||||
|
||||
# TODO does this new stuff work even? need to check on the frontend
|
||||
serializer.delete(validated_data)
|
||||
|
||||
# for instance in self.get_objects():
|
||||
# if instance is not None:
|
||||
# self.perform_destroy(instance)
|
||||
self.perform_destroy(serializer)
|
||||
|
||||
# Delete the related caches
|
||||
self.delete_cache(request)
|
||||
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
def perform_destroy(self, serializer):
|
||||
" Custom generic destroy hook "
|
||||
assert hasattr(serializer, 'destroy'), (
|
||||
f'Cannot call .destroy() on serializer {serializer.__class__} as'
|
||||
' no such attribute exists.'
|
||||
)
|
||||
validated_data = serializer.validated_data
|
||||
serializer.destroy(validated_data)
|
||||
|
||||
Reference in New Issue
Block a user