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)