您当前的代码所面临的问题,特别是链接不起作用,是因为您没有在任何上下文中传递到序列化器。
class DirContents(generics.GenericAPIView):
def get(self, request, *args, **kwargs):
files = FileObj.objects.filter(parent=kwargs.get('dir_id'))
dirs = DirObj.objects.filter(parent=kwargs.get('dir_id'))
context = {
"request": request,
}
files_serializer = FileObjSerializer(files, many=True, context=context)
dirs_serializer = DirObjSerializer(dirs, many=True, context=context)
response = files_serializer.data + dirs_serializer.data
return Response(response)
对于使用 mixins 的通用视图,这是自动完成的,但对于像这样的情况,需要手动传入。
对于任何来这里将两个模型组合成一个序列化器的人:
使用通用视图时,没有一种简单的方法可以在一个视图中支持多个不同的模型。看起来好像您没有使用它们来过滤查询集,所以这实际上是可以做到的,尽管无论如何都不会被认为是“干净”的。
class DirContents(generics.GenericAPIView):
def get(self, request, *args, **kwargs):
files = FileObj.objects.filter(parent=kwargs.get('dir_id'))
dirs = DirObj.objects.filter(parent=kwargs.get('dir_id'))
files_list = list(files)
dirs_list = list(dirs)
combined = files_list + dirs_list
serializer = YourCombinedSerializer(combined, many=True)
return Response(serializer.data)