Как передать дополнительный параметр с помощью execute_create из django rest framwork?
Я использую общие рамки django. Я пытаюсь вставить запрос имени пользователя в поле автора сообщения.
сериализаторы
class PostSerializer(serializers.ModelSerializer):
spoter = serializers.PrimaryKeyRelatedField(
queryset= User.objects.all(),
)
class Meta:
model = PostModel
fields = ('author','text')
Посмотреть
class UserRequestMixin(object):
def perform_update(self, serializer):
serializer.save(author = self.request.user.id)
def perform_create(self, serializer):
serializer.save(author = self.request.user.id)
class PostViewSet(UserRequestMixin,DefaultsMixin,viewsets.ModelViewSet):
permission_classes = (IsOwnerOrReadOnly,)
queryset = PostModel.objects.all()
serializer_class = PostSerializer
ошибка
status -> 400
{
"author": [
"This field is required."
]
}
3 ответа
Вы должны добавить execute_create() к вашему PostViewSet, указав имя поля, которое должно быть заполнено при сохранении:
class PostViewSet(viewsets.ModelViewSet):
permission_classes = (IsOwnerOrReadOnly,)
queryset = PostModel.objects.all()
serializer_class = PostSerializer
def perform_create(self, serializer):
serializer.save(author = self.request.user)
помните, что ваша модель сообщения должна иметь поле автора
В зависимости от того, что вы хотите сделать, вы должны:
- Пометить поле автора как
read_only=True
или жеrequired=False
- Установите поле автора с помощью
CreateOnlyDefault
Например:
class PostSerializer(serializers.ModelSerializer):
spoter = serializers.PrimaryKeyRelatedField(
queryset= User.objects.all(),
)
class Meta:
model = PostModel
fields = ('author','text')
extra_kwargs = {
'author': {
'read_only': True,
'default': serializers.CurrentUserDefault(),
}
}
Просто исключите
author
поле из ваших полей сериализатора. При звонке
serializer.save
вы можете передать любое поле, не обязательно поля сериализатора.
Поля сериализатора включаются в
request.data
и автор не является таким полем.