【发布时间】:2014-07-05 05:48:24
【问题描述】:
这是场景:
我有两个模型; FileObj 和 DirObj。
class DirObj(models.Model):
[...]
parent = models.ForeignKey('self')
[...]
class FileObj(models.Model):
[...]
parent = models.ForeignKey(DirObj)
[...]
我有以下序列化程序:
class FileObjSerializer(serializers.ModelSerializer):
[...]
class Meta:
model = FileObj
class DirObjSerializer(serializers.HyperlinkedModelSerializer):
[...]
parent = serializers.HyperlinkedRelatedField(
view_name = 'dirobj-detail')
class Meta:
model = DirObj
假设当用户浏览到“/directories/[dir_id]”时,我想在单个视图中返回“dir_id”指定的 DirObj 的文件和目录内容,即使用两个不同的序列化器。现在我有(不完全是,但足够接近,所以你明白了要点)以下内容:
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_serializer = FileObjSerializer(files, many = True)
dirs_serializer = DirObjSerializer(dirs, many = True)
response = files_serializer.data + dirs_serializer.data
return Response(response)
这感觉就像一个丑陋的黑客。它还忽略了在浏览 API 时通常会呈现的任何类型的超链接(即,HyperlinkedRelatedFields 不会像应有的那样显示为超链接。)有没有办法序列化任意数量的模型并在单个视图中返回它们,而无需破坏可浏览的 API 和/或必须做(我假设的)一堆额外的工作才能使超链接正常工作?
提前致谢!
【问题讨论】:
标签: python django django-rest-framework