У меня есть два похожих вида, которые возвращают те же сериализованные ответы. Взгляды, как это:Как объединить два похожих вида в один ответ?
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')
Поскольку эти две точки зрения и сериализаторов вернуться по сути, одни и те же данные (поле ИД, поле имени и информация профиля пользователя) и использовать те же параметры запроса (текущий пользователь), я хотел бы объединить эти два в один. Как мне это сделать? В конце концов, я хотел бы, чтобы сериализованный ответ содержал результаты обоих наборов запросов.
Я прав, что вы хотите сделать представление, которое вернет сериализованные модели AND Foo AND FooResponse? – Paul
@Paul Не совсем. Я хочу получить все объекты 'Foo', где пользователь является владельцем и всеми объектами' Foo', где существует объект 'FooResponse', где пользователь является владельцем. – manabreak