0

Я использую общие рамки django rest. Я пытаюсь вставить имя пользователя запроса в поле автора сообщения.Как передать дополнительный параметр, используя функцию perform_create django rest framwork?

сериализаторы

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." 
    ] 
    } 
+0

Пожалуйста, добавьте ваши модели. – Windsooon

ответ

0

В зависимости от того, что вы хотите сделать, вы должны:

  • Отметьте поле автора или как 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(), 
      } 
     } 
0

следует добавить perform_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) 

запомнить Ваш пост модель должна иметь авторское поле

Смежные вопросы