66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
import typing
|
|
|
|
|
|
class CustomOperations:
|
|
"""
|
|
@for Custom Operations in view sets
|
|
"""
|
|
|
|
def custom_create( # noqa
|
|
self,
|
|
user: object = None,
|
|
request: object = None,
|
|
view: object = None,
|
|
data_key: str = None,
|
|
data: dict = None,
|
|
additional_data: dict = None
|
|
) -> typing.Any:
|
|
"""
|
|
to create custom view objects that
|
|
defined in VIEW_SET dictionary to
|
|
just calling this method in other
|
|
view sets
|
|
"""
|
|
view_data = request.data # included needed data for view set # noqa
|
|
if user:
|
|
view_data[data_key].update({'user': user.id}) # noqa
|
|
if additional_data:
|
|
view_data[data_key].update(additional_data)
|
|
|
|
# if we have data_key for dictionary data get value
|
|
# if not, just put additional data in serializer
|
|
if data_key:
|
|
serializer = view.serializer_class(data=view_data[data_key]) # noqa
|
|
if data:
|
|
serializer = view.serializer_class(data=data) # noqa
|
|
serializer.is_valid(raise_exception=True) # noqa
|
|
view.perform_create(serializer) # noqa
|
|
|
|
headers = view.get_success_headers(serializer.data) # noqa
|
|
return serializer.data
|
|
|
|
def custom_update( # noqa
|
|
self,
|
|
user: object = None,
|
|
request: object = None,
|
|
obj_id: object = None,
|
|
view: object = None,
|
|
data_key: str = None,
|
|
data: dict = None,
|
|
additional_data: dict = None
|
|
) -> typing.Any:
|
|
view_data = request.data # included needed data for view set # noqa
|
|
if user:
|
|
view_data[data_key].update({'user': user.id}) # noqa
|
|
if additional_data:
|
|
view_data[data_key].update(additional_data)
|
|
if data_key:
|
|
serializer = view.serializer_class(data=view_data[data_key]) # noqa
|
|
if data:
|
|
serializer = view.serializer_class(data=data) # noqa
|
|
serializer.is_valid(raise_exception=True) # noqa
|
|
serializer.update(view.queryset.get(id=obj_id), view_data[data_key]) # noqa
|
|
# view.perform_update(serializer) # noqa
|
|
headers = view.get_success_headers(serializer.data) # noqa
|
|
return serializer.data
|