python - Django REST Framework:尝试获取序列化程序上的字段值时出现AttributeError
问题描述
我在尝试更正以下错误时遇到问题: AttributeError at /api/v1/tasks/queue/ Got AttributeError when trying to get a value for field start_at
on serializer TaskSerializer
。序列化器字段可能命名不正确,并且与bytes
实例上的任何属性或键都不匹配。原始异常文本是:“bytes”对象没有属性“start_at”。
当我向 API 任务/队列发送请求时发生错误,我遇到 500 内部服务器错误。
我已经尝试过 StackOverflow 上针对类似问题提出的几种解决方案,包括更改字段和序列化程序,但无济于事。
下面贴出相关的代码片段:
序列化程序.py
class TaskSerializer(serializers.ModelSerializer):
start_at = serializers.DateField(format=settings.api_settings.DATE_FORMAT)
class Meta:
model = Task
fields = '__all__'
depth = 2
视图.py
class TaskQueue(generics.ListCreateAPIView):
serializer_class = TaskSerializer
def get_queryset(self):
queryset = Task.objects.all()
update_histogram()
role = self.request.query_params.get('role', None)
user = self.request.user
if authorization(user,1) and role in ['camp', 'prod']:
if Task.objects.filter(status='todo', service__role=role).exclude(service__type='incident').count() <= 1:
return Task.objects.filter(status='todo', service__role=role).exclude(service__type='incident')
else:
queue = queryset.filter(status='todo', previous_task__isnull=True, next_task__isnull=False, service__role=role).exclude(service__type='incident')
node = queue
while node.first().next_task:
node = Task.objects.filter(previous_task=node.first())
queue = queue | node
return queue
else:
return HttpResponse(status=404)
预期的输出是一个带有对象的 json,但我得到了一个错误 500。
任何帮助将不胜感激。
解决方案
该TaskQueue.get_queryset
方法返回一个HttpResponse
.
View.get_queryset
当被覆盖时必须返回一个QuerySet
并且没有其他对象。
为了将未经授权的请求解析为 404,请返回空QuerySet
值或使用权限类将此检查上移。
class TaskQueue(generics.ListCreateAPIView):
serializer_class = TaskSerializer
def get_queryset(self):
# ...
if authorization(user,1) and role in ['camp', 'prod']:
#...
else:
return Task.objects.none()
推荐阅读
- apache-spark - spark在不使用var的情况下覆盖数据框变量
- ios - tableView visibleCells swift上缺少单元格
- json - 从 firebase 数据库中检索数据到嵌套字典
- python - 使用索引和字符串连接改善 python 代码的运行时间
- typescript - Linter 和编译器选项,用于任何到显式类型转换,无需强制转换
- asp.net-core - 如何在 gremlin 中将 DocumentClient 转换为 IDocumentClient?
- java - 子类作为 json 父对象
- python - 石头剪刀布python程序输入错误
- python - 将给定的 pandas 数据帧转换为另一个数据帧
- google-oauth - 使用 oauth2client 创建 google api 凭据(来自具有范围和委托帐户的服务帐户)