Экземпляр модели Djnago обновляется только после повторного вызова objects.get() (тестовый пример DRF)
У меня есть APIView (DRF), где я устанавливаю поле пользователя is_active в False вместо того, чтобы удалить его, все работает как ожидалось, но у меня есть проводное поведение, когда я пытаюсь сделать тестовый пример для представления, я пытаюсь проверить, является ли поле 'is_active' False после вызова ApiView, но оно остается 'True', если немного изменить код и вызвать user. objects.get() с тем же email пользователя после вызова ApiView, поле нового экземпляра is_active становится False.
Я никогда не сталкивался с таким поведением, может ли кто-нибудь объяснить причину этого? спасибо!
этот тест пройден:
def test_delete_account(self):
self.authentication() # create user and log him in
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active, True)
response = self.client.post(reverse('delete-account'))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active,False)
этот тест не прошел:
def test_delete_account(self):
self.authentication() # create user and log him in
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active, True)
response = self.client.post(reverse('delete-account'))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(user.is_active,False) # FAILS HERE
удалить учетную запись ApiView:
class DeleteAccountAPIView(GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request):
user = self.request.user
user.is_active = False
user.save()
return Response(status=status.HTTP_204_NO_CONTENT)
В вашем тесте вы вызываете 'удаленный' запрос, изменения находятся в 'remote':
client ---- (call via post) --> remote
(the test) (django web app)
| |
---------------------------------
|
database
Вот что происходит:
# you get a user from database
user = User.objects.get(email=self.sample_user['email'])
# you make a post to 'remote' server
response = self.client.post(reverse('delete-account'))
# no changes should be in 'client' side
self.assertEqual(user.is_active,True)
# when you refresh data from database
user = User.objects.get(email=self.sample_user['email'])
# you get the current database data that contains changes from remote
self.assertEqual(user.is_active,False)