Serializer.data и serializer.validated_data пустые, когда сериализатор инициализируется словарем

Я создаю приложение, используя django и drf. При тестировании сериализатора я обнаружил, что сериализатор не может сохранить данные в базу данных из-за нулевых ограничений. Ниже приведен тестовый код, сериализатор и модель.

location_serializer_data: LocationDict = {
    'address': 'address',
    'latitude': 11.1,
    'longitude': 22.2,
}


@pytest.mark.django_db
def test_deserializing(self):
    serializer = LocationSerializer(data=location_serializer_data)
    serializer.is_valid()
    new_location = serializer.save() # < where the test explodes

Вот сообщение об ошибке

django.db.utils.IntegrityError: NOT NULL constraint failed: locations_location.latitude

Я обнаружил, что serializer.initial_data получает данные должным образом, но после serializer.is_valid(), два из serializer.data, serializer.validated_data становятся пустыми dict.

Я немного поискал, но не нашел ни одной подсказки о том, что является причиной этого.

Думаю, следующий код должен помочь вам

@pytest.mark.django_db
def test_deserializing(self):
    serializer = LocationSerializer(data=location_serializer_data)
    serializer.is_valid(raise_exception=True) # < Now code will raise error here
    new_location = serializer.save() 

Это гарантирует, что исключение будет вызвано на уровне проверки

Метод

.is_valid() валидирует, но сам по себе не поднимает ошибку. Мы можем сделать serializer.is_valid(raise_exception=True). Он выдает ошибку валидации, если данные не валидны.

Одной из возможных причин является то, что поле latitude не существует в LocationSerializer, потому что оно было "очищено" валидацией сериализатора. Если это возможно, пожалуйста, поделитесь подробностями о LocationSerializer, чтобы мы могли помочь дальше.

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