如何将数据传递给 Django 中的序列化程序

How to pass data to serializers in django

我想将 user_id 从视图传递到序列化程序 我有模型答案

class Answer(models.Model) :
    
    text = models.CharField(max_length=500)
    question_id = models.CharField(max_length=25)
    user_id = models.CharField(max_length=25, default=1)

这是我的序列化程序

class CreateAnswer(generics.CreateAPIView) :

    def get_serializer_context(self):
        context = super().get_serializer_context()
        context["id"] = self.request.user.id
        return context

    serializer_class = AnswerQuestionSerializer
    queryset = Answer.objects.all()

在我看来,我需要写什么才能采用 user_id 并使用此 user_id 创建模型?

您可以覆盖 perform_create 方法并将 user_id 字段传递给序列化程序的 save 方法。

class CreateAnswerView(generics.CreateAPIView) :
    serializer_class = AnswerQuestionSerializer

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

您可以使用 serializers.Hiddenfield 在序列化程序中获取当前用户 class

https://www.django-rest-framework.org/api-guide/fields/#hiddenfield

有多种方法可以完成这项任务。其中之一是覆盖序列化程序中的创建。 以下是代码片段:

class BlogSerializer(serializers.Serializer):

  def create(self, validated_data):
    user = self.context['request'].user
    blog = Blog.objects.create(
       user=user, 
       **validated_data
    )
    return blog

解释:默认情况下,上下文被传递给包含请求的序列化程序。因此,您可以使用 self.context['request'].user

轻松访问用户