python - Django REST 框架中的 {"user":["This field is required."]}
问题描述
Django 在 self.request.user 中从哪里获取用户?
执行 GET 请求时,Django 看到了 User,而执行 POST 请求时,他没有看到并抛出这样的错误。用户信息从前端在 cookie 中传输。
视图.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')
模型.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)
推荐阅读
- python - 从子矩阵列表中构建矩阵
- powershell - PSScriptRoot 变量有值但不能使用
- sql-server-2008 - 将已部署的 SSIS 包从 SQL Server 2008 导出到 Visual Studio 2008
- python - (PYTHON 简单服务器)输入任务列表与子进程混淆
- testng - 如何在编写 mockito testNG 时处理方法内部的新对象创建
- google-apps-script - Google Apps Script Web App中相对链接的最佳方式
- spring - 我怎样才能做一个休息api?
- database - 在 Flutter 中实现 Stream Builder
- c++ - 将 int[n][n] 转换为向量
> - pdf - 是否可以在 Edge PDF Viewer 中提交 PDF 表单?