Django Rest:自动向“required”字段添加数据

2024-09-30 06:16:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为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)

它也给了我同样的回答。我迷路了。如果您能帮助解决这个问题,我们将不胜感激!:)


Tags: 方法selfdata序列化requestdefcreatepost
2条回答

我也有和你一样的问题。如果使用的是常规视图,请执行以下操作:

视图:

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

序列化程序:

您只需在序列化程序中添加此项即可保存用户。PrimaryKeyRelatedField用于使用其主键表示关系的目标。read_only=True使此字段为只读。在

^{pr2}$

错误来自序列化程序验证,在调用create方法之前调用该验证。因此,对create方法的更改不会产生任何影响。可以通过调用序列化程序中不需要user字段来解决此问题。这看起来像:

from rest_framework import serializers

class WaitercallCreateSerializer(serializers.ModelSerializer):
    user = serializers.JSONField(required=False)

    class Meta:
        model = Waitercall
        fields = ('order', 'user', 'done', 'type_of_call')
        read_only_fields = ('user', 'done')

相关问题 更多 >

    热门问题