상황
@swagger_auto_schema(operation_description="학생 수업 스케줄 예약 변경",
operation_id='update student class schedule',
request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'old_schedule': openapi.Schema(type=openapi.TYPE_ARRAY,
items=openapi.Items(openapi.TYPE_OBJECT,
properties={
'schedule_id': openapi.Schema(
type=openapi.TYPE_INTEGER)})),
'new_schedule': openapi.Schema(type=openapi.TYPE_ARRAY,
items=openapi.Items(openapi.TYPE_OBJECT,
properties={
'schedule_event_detail_id': openapi.Schema(
type=openapi.TYPE_INTEGER),
'user_id': openapi.Schema(
type=openapi.TYPE_STRING),
'day_code': openapi.Schema(
type=openapi.TYPE_INTEGER),
'type_code': openapi.Schema(
type=openapi.TYPE_INTEGER),
'ref_id': openapi.Schema(
type=openapi.TYPE_INTEGER),
'name': openapi.Schema(
type=openapi.TYPE_STRING),
'description': openapi.Schema(
type=openapi.TYPE_STRING),
'memo': openapi.Schema(
type=openapi.TYPE_STRING),
'block_time': openapi.Schema(
type=openapi.TYPE_INTEGER),
'location': openapi.Schema(
type=openapi.TYPE_STRING),
'meet_id': openapi.Schema(
type=openapi.TYPE_STRING),
'max_attendee': openapi.Schema(
type=openapi.TYPE_INTEGER),
'min_attendee': openapi.Schema(
type=openapi.TYPE_INTEGER),
'start_date': openapi.Schema(
type=openapi.TYPE_STRING),
'end_date': openapi.Schema(
type=openapi.TYPE_STRING),
'start_time': openapi.Schema(
type=openapi.TYPE_STRING),
'end_time': openapi.Schema(
type=openapi.TYPE_STRING)}))}))
위와 같은 request data 중 new_schedule의 데이터만을 가지고 다른 함수의 request data를 만들어 호출하려 한다.
* swagger_auto_schema는 다음에 다루도록 하겠다.
해결
def update(self, request, user_id, article_id):
try:
...
request._full_data = request.data['new_schedule']
self.create(self, request, user_id, article_id)
return Response(status=status.HTTP_200_OK)
except:
traceback.print_exc()
return Response(status=status.HTTP_400_BAD_REQUEST)
로직 자체는 간단하다.
update 함수에서는 기존 데이터들의 status를 INACTIVE로 변경하고 (코드 생략)
받아온 data로 새로운 request data를 만들고, create 함수를 호출하여 새로운 레코드를 생성하는 것이다.
request._full_data = request.data['new_schedule']
위의 코드가 해당 역할을 한다. request._full_data 를 통해 request data를 수정할 수 있다.
References
https://www.edureka.co/community/74076/how-can-modify-request-data-in-django-rest-framework
'Django' 카테고리의 다른 글
Django - N+1 Problem (0) | 2021.10.07 |
---|---|
Django - update 전 후 쿼리 결과의 변화(Lazy Loading) (0) | 2021.09.27 |
Django object has no attribute 'update' (0) | 2021.09.02 |
Django __str__ (0) | 2021.08.30 |
Django 쿼리문 F() 사용하기 (0) | 2021.08.04 |