是否有一种方法可以将请求的有效载荷(如{'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'})
答案 0 :(得分:1)
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()
的名称。必须对每个对象执行更新操作