gpt4 book ai didi

python - Django 休息 : Add data to a "required" field automatically

转载 作者:行者123 更新时间:2023-11-30 22:22:22 24 4
gpt4 key购买 nike

我想自动为 Django Rest 框架中的必填字段分配一个值,而不必在 post 请求中给出该值。

我的观点:

class WaitercallCreate(CreateAPIView):
serializer_class = WaitercallCreateSerializer
permission_classes = (IsAuthenticated, )

序列化器:

class WaitercallCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Waitercall
fields = ('order', 'user', 'done', 'type_of_call')

read_only_fields = ('user', 'done')

用户应该能够执行后请求,只需在 header 中提供他们的 token ,并将订单 ID 作为正文。我想将用户的值默认设置为请求用户。我尝试在我的 View 中重写perform_create方法,如下所示:

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

这不起作用。然后我尝试重写 View 中的 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)

这也不起作用,因为 Orderdicts 是不可变的。对于第一次(也是最后一次尝试,请进一步阅读)我总是得到相同的响应:

{
"user": [
"This field is required."
]
}

最后我找到了this stackoverflow 帖子,建议覆盖序列化器中的 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)

它也给了我同样的回应。我迷路了。接下来我可以尝试什么?

最佳答案

该错误来自序列化器验证,该验证在调用 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')

关于python - Django 休息 : Add data to a "required" field automatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com