Как преобразовать два ListAPIViews, которые отличаются в один ModelViewSet - PullRequest
0 голосов
/ 22 января 2019

У меня есть проект django, над которым я работаю, для которого нужна модель пользователей и аккаунта.Я использую и интегрирую Django Rest Framework.Первоначально я использовал отдельные общие представления API от DRF.Я думаю о преобразовании отдельных общих взглядов в набор представлений.Я смог сделать это для пользовательской модели.Я хочу преобразовать представления модели учетной записи в набор представлений.

Моя проблема заключается в том, что у меня есть две версии одного и того же ListAPIView для модели профиля.В верхнем представлении перечислены все учетные записи в базе данных, а во втором - все учетные записи для отдельного пользователя на основе иностранного ключа User__Username в модели Account.

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
    lookup_field = 'username'

class AccountListView(ListAPIView):
    queryset = Account.objects.all()
    serializer_class = AccountSerializer

class AccountUserListView(ListAPIView):
    queryset = Account.objects.all()
    serializer_class = AccountSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_fields = ('user', '_id', '_class')

    def get_queryset(self):
        return self.queryset.filter(user_username=self.kwargs.get('username'))

Это говорит о том, что я могу конкретно определить свойства представления в пределах набора, но я хочу определить две версии ListAPIView для отдельной модели.Существует ли способ двойного определения одного и того же представления в одном наборе.

Я в основном хочу определить оба моих аккаунта ListAPIViews в одном наборе.Как мне поступить так, если это возможно ??

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать @action decorator для определения.

class UserViewSet( mixins.ListModelMixin, viewsets.GenericViewSet):
     """
        A simple ViewSet for listing or retrieving users.
     """
   def list(self, request):
      queryset = User.objects.all()
      serializer = UserSerializer(queryset, many=True)
      return Response(serializer.data)

   @acttion(method="get", details=False, serializer_class=AccountSerializer)
   def account_list(self, request, *args, **kwargs):
       queryset = User.objects.all()
       data = self.get_serializer_class().(instance=queryset, many=True).data
       return response.Response(data)
...