django - Django Rest Framework - 如何在 POST 时设置 current_user
问题描述
我刚刚学习了一个使用 DRF 的小教程,但我不知道在发布新对象时如何让他的用户喜欢我的模型
这是我的模型:
# Create your models here.
class Project(models.Model):
# project title
title = models.CharField(max_length=255, null=False)
# subtitle
subtitle = models.CharField(max_length=255, null=False)
#######
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
所以我的serializer
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ("id", "title", "subtitle", "user_id")
所以,现在view
我可以通过以下方式访问 current_user :
request.user
class ListProjectsView(generics.ListCreateAPIView):
authentication_classes = [authentication.TokenAuthentication]
queryset = Project.objects.all()
serializer_class = ProjectSerializer
def list(self, request):
queryset = Project.objects.filter(user_id=request.user.id)
serializer = ProjectSerializer(queryset, many=True)
return Response(serializer.data)
[...]
def create(self, request, pk = None):
return super(ListProjectsView, self).create(request, pk = None)
我想有一种方法可以 request.user
通过创建以允许填充我的 Project.user_id 吗?
无论我在做什么,我都无法设置用户,我得到了
django.db.utils.IntegrityError: null value in column "user_id" violates not-null constraint
错误
任何想法?
谢谢!
解决方案
尝试使用以下方法覆盖。每次执行 PUT/PATCH/CREATE 操作时都会调用以下方法。这是传递当前用户的好方法。
def perform_create(self, serializer):
serializer.save(user = self.request.user)
推荐阅读
- swift - 搜索功能在透明的 UITableView 中实现,但它不起作用。任何帮助表示赞赏
- c# - 使用集合的属性与表达式树中的其余属性进行比较
- php - 在产品页面中添加到购物车表单后显示预计发货日期
- php - 使用 php for-loop 将动态创建的输入字段中的数据插入数据库
- java - 使用递归在网格上回溯
- c++ - 从 QNetworkReply 读取后,Qt5 没有波兰字符
- swiftui - 在 SwiftUI 中有条件地更改滑块的缩略图
- c# - Unity C#)当我使用 OnTriggerEnter 时出现 NullReferenceException 并且我不知道如何修复它
- php - 将循环语句的结果存储在 PHP 中的变量中
- csv - 使用 CsvHelper 从 C# 中的 .csv fie 读取文本时出错