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
, чтобы мы могли помочь дальше.