Django Rest Framework тестирование разрушить представление не удается

Я получил следующий тестовый пример:

    def test_delete_address(self) -> None:
    """test disable address"""

    # res = create_object_helper(self.client, self.url, self.data, self.headers)

    res = self.client.post(self.url, json.dumps(self.data), **self.headers)

    self.assertEqual(res.status_code, 204)

    address = AddressBook.objects.all().first()
    url = reverse(
        "marketplace_api:add-order-address-detail", kwargs={"pk": address.id}
    )

    res = self.client.delete(url, **self.headers)
    self.assertEqual(res.status_code, 204)
    address.refresh_from_db()
    breakpoint()

    self.assertTrue(address.disabled)

А также взгляд со стороны:

def destroy(self, request, *args, **kwargs):

    try:
        instance = AddressBook.objects.get(id=kwargs.get('pk'), user=request.user)
    except ObjectDoesNotExist:
        return Response(
            {"error": "Address was not found"}, status.HTTP_404_NOT_FOUND
        )

    breakpoint()
    if instance.disabled:
        return Response(
            {"error": "Address was not found"}, status.HTTP_404_NOT_FOUND
        )
    instance.disabled = True
    instance.save()

    add = AddressBookSerializer(instance=instance)

    return Response(add.data, status.HTTP_204_NO_CONTENT)

Что я пытаюсь достичь, так это протестировать мой переопределенный метод, где я не уничтожаю экземпляр, а просто изменяю флаг. Проблема, с которой я сталкиваюсь, заключается в том, что мой тестовый пример получает другие данные из БД, чем в представлении. Чтобы проверить это, я распечатал некоторые результаты в pdb:

Данные ответа (res.data) -> возвращены из просмотра:

{'id': 1, 'invoice': False, 'user': 81, 'first_name': 'Test name', 'last_name': 'Test name', 'street': 'Unknown', 'building': 'Unknown', 'place': 'Unknown', 'city': 'Unknown', 'zip_code': 'Unknown', 'phone_number': 'Unknown', 'email': 'test@test.pl', 'company_name': None, 'nip': None, 'remarks': None, 'disabled': True, 'created': '2022-08-02 15:17:50'}

Данные адреса объекта: (address.__dict__):

{'_state': <django.db.models.base.ModelState object at 0x0000026308ED92B0>, 'id': 1, 'user_id': 81, 'first_name': 'Test name', 'last_name': 'Test name', 'street': 'Unknown', 'building': 'Unknown', 'place': 'Unknown', 'city': 'Unknown', 'zip_code': 'Unknown', 'phone_number': 'Unknown', 'email': 'test@test.pl', 'company_name': None, 'nip': None, 'remarks': None, 'disabled': False, 'created': datetime.datetime(2022, 8, 2, 13, 17, 50, 108551, tzinfo=<UTC>), '_prefetched_objects_cache': {}}

И последнее, что я сделал, это повторный запрос к БД и проверка объекта, который сохранен (AddressBook.objects.all().first().__dict__):

{'_state': <django.db.models.base.ModelState object at 0x0000026308EB8400>, 'id': 1, 'user_id': 81, 'first_name': 'Test name', 'last_name': 'Test name', 'street': 'Unknown', 'building': 'Unknown', 'place': 'Unknown', 'city': 'Unknown', 'zip_code': 'Unknown', 'phone_number': 'Unknown', 'email': 'test@test.pl', 'company_name': None, 'nip': None, 'remarks': None, 'disabled': False, 'created': datetime.datetime(2022, 8, 2, 13, 17, 50, 108551, tzinfo=<UTC>)}

Результат моего расследования таков: представление изменяет состояние объекта (отключено с False на True), но после возврата к тестовому методу состояние базы данных изменяется. Может ли кто-нибудь объяснить мне, почему? Что я делаю не так, и как это исправить?

Вернуться на верх