python - Django Rest Framework:序列化 id 列表
问题描述
有没有办法像{'ids': [1,2,3]}
主键的 ListField 一样序列化请求的有效负载(即通过序列化程序检查具有此类 id 的 Task 对象是否存在)?
或者我应该使用什么方法为另一个微服务编写 API 视图以确认任务已入队?
serializer = ConfirmationSerializer(
data=request.data, many=True
)
queryset = Task.objects.filter(
ids_in=serializer.data.ids,
status=Task.STATUS_CREATED,
)
queryset.update(
status=Task.STATUS_SENT,
confirmed_at=dt.datetime.now()
)
return Response({'status': 'ok'})
解决方案
PrimaryKeyRelatedField
可用于序列化主键列表。只需传递queryset
参数来验证字段输入和内部create
方法,您就可以访问Task
要更新的对象列表
class ConfirmationSerializer(Serializer):
tasks_ids = PrimaryKeyRelatedField(
many=True,
queryset=Task.objects.filter(status=Task.STATUS_CREATED)
)
def create(self, validated_data):
task_list = validated_data['tasks_ids']
# Update the tasks here
update_task_list(task_list)
请记住,这task_list
不是查询集(是Task
对象列表),不可能调用类似task_list.update()
. 必须为每个对象执行更新操作
推荐阅读
- python - 如何调试需要我玩游戏才能重新创建错误的视频游戏?
- node.js - WebSocket(wss)节点网络问题
- wpf - 如何删除 WPF 网格单元格之间的小边框?
- python - Python Watchdog 获取刚刚创建的文件名?
- visual-studio - Visual Studio 解决方案在构建时复制文件,但我找不到发生这种情况的位置
- c++ - 这种计算数组大小的方法不起作用?
- javascript - 如何检查对象的Javascript数组是否具有相同的值
- python - Python Discord Bot @commands.has_any_role 问题
- installation - 尝试创建扩展时出错:pg_stat_statement
- python-3.x - UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 的字节 0x80:读取文本文件时起始字节无效