# webmaster.view
class NoticeView(APIView):
def post(self, request):
request.data['user'] = request.user.id
notice_serializer = NoticeSerializer(data=request.data)
if notice_serializer.is_valid():
notice_serializer.save()
return Response({"message" : "공지사항 작성에 성공했다북!"}, status=status.HTTP_200_OK)
else:
print(notice_serializer.errors)
return Response({"message" : "공지사항 작성에 실패했다북..."}, status=status.HTTP_400_BAD_REQUEST)
# webmaster.test
class NoticeTest(APITestCase):
@classmethod
def setUpTestData(cls):
cls.user_data = {'username' : 'heejeong', 'password': '1234'}
cls.notice_data = {'title' : '안녕' , 'content' : '반갑습니다'}
cls.user = UserModel.objects.create_user('heejeong', '1234')
def setUp(self):
self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']
# 공지사항 목록 조회 API
def test_list_notice(self):
response = self.client.get(reverse('webmaster:list_notice'), self.data)
self.assertEqual(response.status_code,200)
# 공지사항 작성하기 API
def test_post_notice(self):
response = self.client.post(
path = reverse("webmaster:notice"),
data = self.notice_data,
HTTP_AUTHORIZATION = f"Bearer {self.access_token}"
)
self.assertEqual(response.status_code, 200)
AttributeError: This QueryDict instance is immutable
This QueryDict instance is immutable
def post(self, request):
'''
기존코드
request.data['user'] = request.user.id
notice_serializer = NoticeSerializer(data=request.data)
'''
print(request.data) # 테스트코드 상에서 QueryDict인 request.data에서 사용할 수 있는 메서드 확인
request_data_copy = request.data.copy() # mutable 한 딕셔너리로 카피하는 메서드
request_data_copy['user'] = request.user.id
notice_serializer = NoticeSerializer(data=request_data_copy)
...
생략
def post(self):
notice_serializer = NoticeSerializer(data=request.data)
if notice_serializer.is_valid():
notice_serializer.save(user=self.request.user)
return Response({"message" : "공지사항 작성에 성공했다북!"}, status=status.HTTP_200_OK)
else:
print(notice_serializer.errors)
return Response({"message" : "공지사항 작성에 실패했다북..."}, status=status.HTTP_400_BAD_REQUEST)