如何将数据传递给 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
轻松访问用户
我想将 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
轻松访问用户