Django Rest Framework: трансформирующаяся модель для сериализатора - PullRequest
0 голосов
/ 30 января 2020

У меня есть модель приглашения, которая сопоставляет приглашенных с приглашенными user и to_user. Однако мне нужно вернуть клиенту только список пользователей. Как мне преобразовать набор запросов объектов Пригласить (просто id, user и to_user) в запрос пользователей, сопоставляемых с этим to_user field? Вот что у меня есть.

class Invite(AbstractBaseModel):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE,
                             related_name='invites',
                             verbose_name=_('User'))

    to_user = models.OneToOneField(settings.AUTH_USER_MODEL,
                                   unique=True,  # Each user can only redeem one code.
                                   on_delete=models.CASCADE,
                                   related_name='invitees',
                                   error_messages={'unique': _('You\'ve already claimed an invite.')},
                                   verbose_name=_('To User'))

class InvitesViewSet(viewsets.ViewSet):
    permission_classes = [IsAuthenticated, ]

    def list(self, request):
        """
        List all people invited by the request.user
        """
        invite_objects = Invite.objects.filter(user=request.user)
        invited_users = ??? (Users.objects.filter(id__in=invite_objects.to_user.id?) <- ?
        serializer = UserSerializer(invited_users, many=True)
        return Response(serializer.data)

1 Ответ

0 голосов
/ 30 января 2020

Мое решение:

invite_user_ids = Invite.objects.filter(user=request.user).values_list('to_user', flat=True)
invited_users = Users.objects.filter(id__in=invite_user_ids) 

Не помечаете как ответивший, есть ли у кого-нибудь проблемы с этим решением?

...