python - 如何将经过身份验证的用户设置为序列化器?

标签 python django api django-rest-framework

我使用 django Rest 框架创建了简单的 CreateAPIView。

class CreatePostAPIView(generics.CreateAPIView):
    serializer_class = serializers.PostSerializer
    permission_classes = [IsAuthenticated]

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

class Post(models.Model):
    user    = models.ForeignKey(User, on_delete = models.CASCADE, null = True, blank = False)
    spot    = models.ForeignKey(Spot, on_delete = models.CASCADE, null = True, blank = False)
    comment = models.TextField(null = True, blank =  False)

模型 Spot 具有三个字段

  • 用户
  • 现货
  • 评论

从客户端,点和评论使用来自 JSON 的 http POST 请求参数发送。

但是用户没有附带http POST请求参数,但我需要从django的经过身份验证的用户(如request.user)获取用户。我知道我可以从 request.user 获取用户,但是如何将用户设置为序列化器?

最佳答案

覆盖perform_create(...)--(DRF doc) CreatePostAPIView 类的方法并在 read_only_fields--(DRF doc) 中设置 userPostSerializer

# views.py
class CreatePostAPIView(generics.CreateAPIView):
    serializer_class = serializers.PostSerializer
    permission_classes = [IsAuthenticated]

    <b>def perform_create(self, serializer):
        serializer.save(user=self.request.user)</b>


# serializers.py
class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'
        <b>read_only_fields = ('user',)</b>

关于python - 如何将经过身份验证的用户设置为序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106711/

相关文章:

python - 500错误: null value in column "timeline_id" violates not-null constraint

javascript - Google Map API setCenter 方法不起作用

python - 寻找特定区域的轮廓

Python:WAITING外部启动的进程完成

django - Django 中的自定义 url 模式

javascript - YouTube IFrame Player API缩略图未显示

javascript - Flash fscommand 无法运行 Internet Explorer 9

python - 如何在pandas groupby对象中使用IF NOT IN?

python - 从 Linux 终端执行包含子进程的 PyQt5 GUI 会导致 GUI 出现黑屏并卡住

database - 如何在 Django 中创建不区分大小写的数据库索引?