【发布时间】:2015-09-08 09:43:11
【问题描述】:
我有两个相似的视图,它们返回相同的序列化响应。意见是这样的:
class GetFoos(generics.ListAPIView):
# init stuff here
def list(self, request):
queryset = Foo.objects.filter(owner = request.user)
serializer = FooSerializer(queryset, many = True)
return Response(serializer.data, status = status.HTTP_200_OK)
class GetFooResponses(generics.ListAPIView):
# init stuff here
def list(self, request):
queryset = FooResponse.objects.filter(owner = request.user)
serializer = FooResponseSerializer(queryset, many = True)
return Response(serializer.data, status = status.HTTP_200_OK)
序列化器是这样的:
class FooSerializer(serializers.ModelSerializer):
user = serializers.ProfileInfoSerializer(source = 'owner.userprofile', read_only = True)
class Meta:
model = Foo
fields = ('id', 'name', 'user')
class FooResponseSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField(source = 'foo.id')
name = serializers.ReadOnlyField(source = 'foo.name')
user = serializers.ProfileInfoSerializer(source = 'owner.userprofile', read_only = True)
class Meta:
model = FooResponse
fields = ('id', 'name', 'user')
最后,模型看起来像这样:
class Foo(models.Model):
owner = ForeignKey('auth.User', related_name = 'foos')
name = models.CharField()
class FooResponse(models.Model):
owner = ForeignKey('auth.User', related_name = 'responses')
foo = ForeignKey(Foo, related_name = 'responses')
由于这两个视图和序列化程序返回基本相同的数据(ID 字段、名称字段和用户配置文件信息)并使用相同的请求参数(当前用户),我想将这两者合二为一。我怎么做?最后,我希望序列化的响应包含两个查询集的结果。
【问题讨论】:
-
您想创建一个视图是否正确,它将返回 AND Foo AND FooResponse 序列化模型?
-
@Paul 不完全是。我想获取用户是所有者的所有
Foo对象以及存在FooResponse对象的所有Foo对象,其中用户是所有者。
标签: python django serialization django-rest-framework