J'ai trois modèles - articles, auteurs et tweets. J'ai finalement besoin d'utiliser Django REST Framework pour construire un flux qui agrège tous les objets en utilisant les modèles Article et Tweet en un seul flux chronologique inversé).
Une idée de comment je ferais ça? J'ai l'impression d'avoir besoin de créer un nouveau sérialiseur, mais je ne suis vraiment pas sûr.
Merci!
Edit: Voici ce que j'ai fait jusqu'à présent.
app/serializers.py:
class TimelineSerializer(serializers.Serializer):
pk = serializers.Field()
title = serializers.CharField()
author = serializers.RelatedField()
pub_date = serializers.DateTimeField()
app/views.py:
class TimelineViewSet(viewsets.ModelViewSet):
"""
API endpoint that lists all Tweet/article objects in rev-chrono.
"""
queryset = itertools.chain(Tweet.objects.all(), Article.objects.all())
serializer_class = TimelineSerializer
Cela me semble assez proche. Je n'ai pas utilisé ViewSets dans DRF personnellement, mais je pense que si vous changez votre code en ceci, vous devriez aller quelque part (désolé - pas testé non plus):
class TimelineViewSet(viewsets.ModelViewSet):
"""
API endpoint that lists all Tweet/article objects in rev-chrono.
"""
def list(self, request):
queryset = list(itertools.chain(Tweet.objects.all(), Article.objects.all()))
serializer = TimelineSerializer(queryset, many=True)
return Response(serializer.data)
Si vous n'êtes pas connecté à l'utilisation d'un ViewSet, un generics.ListAPIView
serait un peu plus simple:
class TimeLineList(generics.ListAPIView):
serializer_class = TimeLineSerializer
def get_queryset(self):
return list(itertools.chain(Tweet.objects.all(), Article.objects.all()))
Notez que vous devez convertir la sortie de chain
en une liste pour que cela fonctionne.