在请求后为序列化程序指定django rest框架字段?
我有以下代码:在请求后为序列化程序指定django rest框架字段?,django,django-rest-framework,Django,Django Rest Framework,我有以下代码: models.py class Interview(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, help_text="The Primary Key of the Interview") organization = models.ForeignKey(Organization, on_delete=models.CASCADE
models.py
class Interview(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, help_text="The Primary Key of the Interview")
organization = models.ForeignKey(Organization, on_delete=models.CASCADE, help_text="The Primary Key of the Organization in the interview")
question = name = models.CharField(max_length=200, help_text="The Question")
class InterviewSerializer(serializers.ModelSerializer):
class Meta:
model = Interview
fields = ('organization', 'question')
class InterviewViewset(viewsets.ModelViewSet):
"""
API endpoint that allows Interviews to be viewed or edited.
"""
serializer_class = InterviewSerializer
serializers.py
class Interview(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, help_text="The Primary Key of the Interview")
organization = models.ForeignKey(Organization, on_delete=models.CASCADE, help_text="The Primary Key of the Organization in the interview")
question = name = models.CharField(max_length=200, help_text="The Question")
class InterviewSerializer(serializers.ModelSerializer):
class Meta:
model = Interview
fields = ('organization', 'question')
class InterviewViewset(viewsets.ModelViewSet):
"""
API endpoint that allows Interviews to be viewed or edited.
"""
serializer_class = InterviewSerializer
views.py
class Interview(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, help_text="The Primary Key of the Interview")
organization = models.ForeignKey(Organization, on_delete=models.CASCADE, help_text="The Primary Key of the Organization in the interview")
question = name = models.CharField(max_length=200, help_text="The Question")
class InterviewSerializer(serializers.ModelSerializer):
class Meta:
model = Interview
fields = ('organization', 'question')
class InterviewViewset(viewsets.ModelViewSet):
"""
API endpoint that allows Interviews to be viewed or edited.
"""
serializer_class = InterviewSerializer
现在,创建面试的请求主体需要以下字段:
{
"organization": "string",
"question": "string"
}
我希望面试的组织自动设置为当前用户组织(request.user.organization
-我有一个自定义用户模型)。如何为我的视图集优雅地执行此操作?一种方法(可能是最好的)是重写ModelSerializer类的保存/创建/更新方法
在那里,您可以使用self.context.get(“请求”)
获取当前用户。如果仍然需要序列化组织
字段,只需将其设置为read\u only=True
,这也是我的第一个想法,但我认为必须有一种更简单的方法来使用获取序列化器\u上下文
。但是,对我来说,使用get\u serializer\u context
会导致违反notnull约束
。我不知道如何处理get\u serializer\u context
。我不保存/创建模型实例。您的序列化程序中已经有了请求上下文,应该足够了。我希望在将其传递给序列化程序之前,使用get\u serializer\u context
设置组织机构
,以便序列化程序可以使用它创建对象。无论如何,在保存模型实例之前,您应该编写一些代码来设置组织
,因为DRF不会为您这样做。这里面没有这种魔力