Jac*_*cki 4 python django serialization
我在 python 方面没有太多经验,但是有任务在 django 中编写服务器,它将处理我从前端发送的 api 请求,问题是 eventho GET 运行良好,POST 仍然会抛出一些错误。如果我通过管理面板添加新徽标,它会起作用,当我尝试通过邮递员这样做时,它会抛出此错误:
Traceback (most recent call last):
File "/home/user/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/user/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/user/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/.local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/user/.local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
return self.dispatch(request, *args, **kwargs)
File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
raise exc
File "/home/user/.local/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
AttributeError: 'LogoSerializer' object has no attribute 'name'
Run Code Online (Sandbox Code Playgroud)
我的代码:已编辑
class LogoViewSet(viewsets.ViewSet):
def list(self, request):
queryset = Logo.objects.all()
serializer = LogoSerializer(queryset, many=True)
return Response(serializer.data)
def create(self, request):
serializer = LogoSerializer(data=request.data)
if serializer.is_valid():
bg = LogoSerializer(
name=serializer.name,
thumb=serializer.thumb,
thumbL=serializer.thumbL,
dataL=serializer.dataL,
)
bg.save()
else:
bg = serializer.errors
# print(bg)
return Response(bg)
Run Code Online (Sandbox Code Playgroud)
和序列化器:
class LogoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Logo
fields = ('name', 'thumb', 'thumbL', 'dataL')
def create(self, validated_data):
return Logo.objects.create(**validated_data)
Run Code Online (Sandbox Code Playgroud)
您不通过属性访问序列化程序数据,而是通过datadict访问它。
但根本没有必要这样做。您的序列化程序已经包含用于创建的代码,您应该保存它。
def create(self, request):
serializer = LogoSerializer(data=request.data)
if serializer.is_valid():
bg = serializer.save()
Run Code Online (Sandbox Code Playgroud)
但你甚至不需要这样做。ViewSet 已经为你做了这件事。无需在该视图集上定义任何一个list或create方法。
序列化器create方法也无关紧要。
| 归档时间: |
|
| 查看次数: |
8850 次 |
| 最近记录: |