Удалить read_only=True
из сериализатора
class ReviewSerializer(serializers.ModelSerializer):
<b>user = UserSerializer()</b>
class Meta:
model = Review
fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'review_text',)
Если вы установите read_only=True
, DRF не будет принимать значениеиз входного источника , даже если он там есть
Из документа
Поля только для чтения включены в APIвывод, но не должен быть включен во ввод во время операций создания или обновления.Любые поля 'read_only', которые неправильно включены во вход сериализатора, будут игнорироваться.
Установите это значение на True
, чтобы убедиться, что поле используется при сериализации представления, но неиспользуется при создании или обновлении экземпляра во время десериализации.
По умолчанию False
ОБНОВЛЕНИЕ
Выследует переопределить create()
метод ReviewSerializer
как
class ReviewSerializer(serializers.ModelSerializer):
<b>user = UserSerializer()
def create(self, validated_data):
user_dict = validated_data.pop('user')
user_obj, created = User.objects.get_or_create(**user_dict)
return Review.objects.create(user=user_obj, **validated_data)</b>
class Meta:
model = Review
fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'review_text',)
только для целей отладки
class ReviewsViewSet(viewsets.ModelViewSet):
queryset = Review.objects.all()
serializer_class = ReviewSerializer
def create(self, request, *args, **kwargs):
print(request.data) # print here <<<<
return super(ReviewsViewSet, self).create(request, *args, **kwargs)