rho*_*ard 5 python django django-rest-framework
为什么在尝试验证数据时“来源”不起作用?
from rest_framework import serializers
class Test(serializers.Serializer):
my_field = serializers.CharField(source='myField')
test_data = {'myField': 'test1', 'myOtherField': 'test2'}
Test(test_data).data
Run Code Online (Sandbox Code Playgroud)
输出:{'my_field':'test1'}。
Test(test_data).is_valid(raise_exception=True)
Run Code Online (Sandbox Code Playgroud)
输出:AssertionError:无法调用,.is_valid()因为data=在实例化序列化器实例时未传递关键字参数。
Test(data=test_data).is_valid(raise_exception=True)
Run Code Online (Sandbox Code Playgroud)
输出: ValidationError: {'my_field': [ErrorDetail(string='此字段为必填项。', code='required')]}
实际上,您应该设置 myField 而不是序列化器字段,并将 source 设置为 my_field (您希望字段具有的名称)。
我在这里给你举了一个例子:
在序列化器.py 中:
from rest_framework import serializers
class TestSerializer(serializers.Serializer):
TestField = serializers.CharField(source="test_field")
Run Code Online (Sandbox Code Playgroud)
在views.py中:
from rest_framework.views import APIView, Response
from .serializers import TestSerializer
class TestView(APIView):
def get(self, request):
test_data = {"TestField": "This is a test value"}
serializer = TestSerializer(data=test_data)
serializer.is_valid(raise_exception=True)
print(serializer.validated_data)
return Response(serializer.validated_data)
Run Code Online (Sandbox Code Playgroud)
该序列化器的输出是:
>>> OrderedDict([('test_field', 'This is a test value')])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |