Тесты Django Rest Framework не работают при использовании PostgreSQL

Я новичок в Django и недавно изменил базу данных с SQLite на PostgreSQL (впервые использую postgreSQL). Я обновил настройки следующим образом:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'DB_NAME',
    'USER': 'DB_USER',
    'PASSWORD': 'DB_PASSWORD',
    'HOST': 'localhost'
    }
}

Для пользователя я не использую пользователя postgress по умолчанию, вместо этого я создал нового пользователя (для которого в ОС есть учетная запись User) и добавил для него пароль. Затем я дал этому пользователю разрешение на createdb:

ALTER USER username CREATEDB;

Я также установил psycopg2.

При обычном использовании api база данных PostgreSQL обновляется просто отлично и работает как ожидалось. Первоначально при использовании SQLite все тесты тоже проходили. Но когда я перешел на PostgreSQL, используя вышеуказанное, 2 из 9 тестов не прошли.

Вот тесты, которые не работают. Все неудачные тесты относятся к одному классу. 6 тестов относятся к другому классу, и все они проходят нормально.

class APIDetailTest(APITestCase):
    items_url = reverse('site')
    item_url = reverse('site-item', args = [1])

    def setUp(self):
        # Creating an initial entry to be tested.
        data = {
            "Name": "data name",
            "Description": "desc",
            "Date": "2022-06-11",
            "Time": "11:00:00",
            "Tag": "",
            }
        self.client.post(self.items_url, data, format='json')

    def test_Get(self):
        # Testing that getting an item by id returns the correct data.
        response = self.client.get(self.item_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data["Name"], "data name")

    def test_Update_Item(self):
        # Testing that changing the data works correctly.
        data = {
            "Name": "data name",
            "Description": "desc 2",
            "Date": "2022-06-11",
            "Time": "11:00:00",
            "Tag": "Work",
            }
        response = self.client.put(self.item_url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        # Checking that changed fields are changed correctly:
        self.assertEqual(response.data["Description"], "desc 2")
        self.assertEqual(response.data["Tag"], "Work")
        # Checking that unchanged fields remained unchanged:
        self.assertEqual(response.data["Name"], "data name")

    def test_Delete_Item(self):
        # Testing that deleting an item removes it fully.
        response = self.client.delete(self.item_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        # Testing that the item no longer exists after it has been deleted
        response = self.client.get(self.item_url)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

Из вышесказанного следует, что test_Get и test_Update_Item оба не работают, если я запускаю тесты. Однако, когда я удаляю 2 из 3 тестов из класса, каждый из них всегда проходит. Но при запуске всех трех тестов вместе они по какой-то причине терпят неудачу.

Ниже приведено сообщение об ошибке:

Found 9 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.FF......
======================================================================
FAIL: test_Get (Calendar.Cal_API.tests.APIDetailTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Documents/Calendar/Calendar/Calendar/Cal_API/tests.py", line 113, in test_Get
    self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 400 != 200

======================================================================
FAIL: test_Update_Item (Calendar.Cal_API.tests.APIDetailTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Documents/Calendar/Calendar/Calendar/Cal_API/tests.py", line 126, in test_Update_Item
    self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 400 != 200

----------------------------------------------------------------------
Ran 9 tests in 0.324s

FAILED (failures=2)
Destroying test database for alias 'default'...

Кто-нибудь знает, почему это происходит?

Спасибо за любую помощь

Вы можете использовать sqlite3 вместо postgres. Добавьте этот код в ваш файл настроек.

import sys
if 'test' in sys.argv or 'test_coverage' in sys.argv: #Covers regular testing and django-coverage
    DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'
Вернуться на верх