我使用 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) 中设置 user
在 PostSerializer
类
# 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/