{"user":["Это поле обязательно для заполнения."]} в Django REST Framework

Откуда Django берет User в self.request.user?

При выполнении GET-запроса Django видит пользователя, а при выполнении POST-запроса не видит его и выбрасывает такую ошибку. Информация о пользователе передается в cookie от фронтенда.

views.py

from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
from rest_framework import pagination
from rest_framework.response import Response
from api.models.notes import Notes
from api.serializers.notes import NotesSerializer

class FilterNotes(generics.ListCreateAPIView):
    serializer_class = NotesSerializer
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        return Notes.objects \
                .filter(user=self.request.user.id) \
                .order_by('-time')
            

models.py

from django.contrib.auth.models import User
from django.db import models


class Notes(models.Model):
    note_id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, models.CASCADE, db_column='user')
    time = models.DateTimeField(auto_now_add=True)
    message = models.TextField(max_length=50, blank=True, null=True)

Определите метод perform_create представления и передайте пользователя в сериализатор для сохранения.

def perform_create(self, serializer):
    serializer.save(user=self.request.user)

Поле пользователя также должно иметь значение при создании новой записи, так как оно является обязательным.

class FilterNotes(generics.ListCreateAPIView):
    serializer_class = NotesSerializer
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        queryset = Notes.objects.filter(user=self.request.user)\
            .order_by('-time')
        return queryset
    
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
Вернуться на верх