我想为django rest框架中的必需字段自动分配一个值,而不必在post请求中给出该值。在
我的观点:
class WaitercallCreate(CreateAPIView):
serializer_class = WaitercallCreateSerializer
permission_classes = (IsAuthenticated, )
序列化程序:
^{pr2}$用户应该能够执行postrequest,只在头中提供他们的令牌,并将order id作为主体。 我想将user的值默认设置为requests用户。 我尝试像这样覆盖视图中的perform_create方法:
def perform_create(self, serializer):
serializer.save(user=self.request.user)
这没用。然后我试着像这样覆盖视图中的create方法:
def create(self, request, *args, **kwargs):
data = request.data
data['user'] = request.user
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
这也不起作用,因为orderdict是不可变的。 对于第一次(也是最后一次尝试,请进一步阅读),我总是得到相同的回答:
{
"user": [
"This field is required."
]
}
最后我找到了thisstackoverflow post,它建议重写序列化程序中的create方法。像这样:
def create(self, validated_data):
print(self.context['request'].user)
validated_data['user'] = self.context['request'].user
return super(WaitercallCreateSerializer, self).create(validated_data)
它也给了我同样的回答。我迷路了。如果您能帮助解决这个问题,我们将不胜感激!:)
我也有和你一样的问题。如果使用的是常规视图,请执行以下操作:
视图:
序列化程序:
您只需在序列化程序中添加此项即可保存用户。
^{pr2}$PrimaryKeyRelatedField
用于使用其主键表示关系的目标。read_only=True
使此字段为只读。在错误来自序列化程序验证,在调用
create
方法之前调用该验证。因此,对create
方法的更改不会产生任何影响。可以通过调用序列化程序中不需要user
字段来解决此问题。这看起来像:相关问题 更多 >
编程相关推荐