首页 > 解决方案 > 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错误

任何想法?

谢谢!

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


尝试使用以下方法覆盖。每次执行 PUT/PATCH/CREATE 操作时都会调用以下方法。这是传递当前用户的好方法。

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

推荐阅读