Django Rest Framework: После добавления связанного поля с помощью сериализатора я получаю ошибку целостности

У меня был следующий сериализатор. Django Rest Framework позволяет мне создавать, обновлять, удалять и получать информацию просто с помощью этого кода. Конечно, я добавляю сериализатор в viewset, но проблема не стоит:

class MeasurmentSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Measurment
        fields = ('id', 'user_statistic', 'value', 'date_created')

Мне нужно было добавить подробную информацию для поля "user_statistic" каждый раз, когда я получаю данные, а не только URL, поэтому я добавил код во второй строке, и он сработал, я получил дополнительную информацию, которая мне была нужна:

class MeasurmentSerializer(serializers.HyperlinkedModelSerializer):
    user_statistic = UserStatisticSerializer(read_only=True) # New Code Added

    class Meta:
        model = Measurment
        fields = ('id', 'user_statistic', 'value', 'date_created')

Однако, когда я POST к API для создания новой информации в базе данных, он показывает следующую ошибку:

NotNullViolation: нулевое значение в столбце "statistic_id" отношения "cms_userstatistic" нарушает ограничение not-null DETAIL: Неудачная строка содержит (55, 6, 0, f, f, null, 2022-01-05, 2022-01-05, null, 67).

Похоже, что сериализация связанного поля не позволяет DRF получать информацию о связанном поле всякий раз, когда он пытается создать новый объект. Как я могу добавить подробную информацию для этого конкретного связанного поля, не нарушая POST-запрос? Интересно, есть ли другой способ получить эту информацию без использования функции "to_representation", который позволит мне настроить результирующий объект.

Я благодарю вас за любую подсказку, которую вы можете мне дать.

Просто сериализуйте ваш user_statistic в другое поле:

from rest_framework import serializers

# ...

class MeasurmentSerializer(serializers.HyperlinkedModelSerializer):
    user_statistic_detailed = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Measurment
        fields = ('id', 'user_statistic', 'value', 'date_created', 
                  'user_statistic_detailed')

        def get_user_statistic_detailed(self, record):
            return serialize(UserStatisticSerializer, record.user_statistic)
Вернуться на верх