{"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)