Я пытаюсь получить данные от нескольких моделей от нескольких сериализаторов.и я получил ответ и данные, но то, что происходит, не давало мне ключей «count», «next» и «previous», чтобы использовать их для нумерации страниц.
, и я создал представление следующим образом:
views.py
class PlayerNotificationView(generics.GenericAPIView):
def get_queryset(self):
return
def get(self, request, *args, **kwargs):
activity_invitation_to_join = ActivityInvite.objects.filter(to_user=self.request.user,
active=True, status__in=('P', 'k',))
team_invitation_to_join = TeamInvite.objects.filter(to_user=self.request.user, active=True,
status__in=('P', 'k',))
team_player_left_team = TeamInvite.objects.filter(team__admin=self.request.user, active=True, status="L")
activity_unread = ActivityInvite.objects.filter(to_user=self.request.user, read="False").count()
team_unread = TeamInvite.objects.filter(to_user=self.request.user, read="False").count()
total = activity_unread + team_unread
un_read = [{'activity_unread': activity_unread,
'team_unread': team_unread,
'total': total}]
context = [{
"request": request,
}]
activity_serializer = MyActivityInviteSerializer(activity_invitation_to_join, many=True, context=context)
team_serializer = MyTeamInviteSerializer(team_invitation_to_join, many=True, context=context)
team_player_left_serializer = MyTeamInviteSerializer(team_player_left_team, many=True, context=context)
un_sorted_queryset = activity_serializer.data + team_serializer.data + team_player_left_serializer.data
from operator import itemgetter
response = sorted(un_sorted_queryset, key=itemgetter('updated_date'), reverse=True) + un_read
context = {
"notifications": response,
}
return Response(context)
и он возвращает ответ, подобный этому:
{
"notifications": [
{
.
.
.
}]}
, и мне нужно точно разбить результат, чтобы он был таким:
{
"count": 2,
"next": next,
"previous": previous,
"notifications": [
{.. }]}
}
Итак, как я могу это сделать?Пожалуйста, кто-нибудь может мне помочь?
, и если есть какое-то решение для этой точки зрения по-другому, чтобы получить данные от нескольких моделей и нескольких сериализаторов.
надеюсь, что это читабельно и понятно для понимания.большое спасибо,
обновление Решение это обновление и решение, чтобы помочь любому человеку, столкнувшемуся с той же проблемой, и он не получил ответ, я сделал это как то, что "schillingt"сказал в ответах следующее:
class LimitPagination(MultipleModelLimitOffsetPagination):
default_limit = 1
class PlayerNotificationView(FlatMultipleModelAPIView):
pagination_class = LimitPagination
add_model_type = True
sorting_fields = ['updated_date']
def get_querylist(self):
activity_invitation_to_join = ActivityInvite.objects.filter(to_user=self.request.user,
active=True, status__in=('P', 'k',))
team_invitation_to_join = TeamInvite.objects.filter(to_user=self.request.user, active=True,
status__in=('P', 'k',))
team_player_left_team = TeamInvite.objects.filter(team__admin=self.request.user, active=True, status="L")
# un_sorted_queryset = activity_serializer.data + team_serializer.data + team_player_left_serializer.data
querylist = (
{'queryset': activity_invitation_to_join.distinct(), 'serializer_class': MyActivityInviteSerializer},
{'queryset': team_invitation_to_join.distinct(), 'serializer_class': MyTeamInviteSerializer},
{'queryset': team_player_left_team.distinct(), 'serializer_class': MyTeamInviteSerializer},
)
return querylist