如何将两个不同的ListAPIView转换为单个ModelViewSet
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将两个不同的ListAPIView转换为单个ModelViewSet相关的知识,希望对你有一定的参考价值。
我有一个我正在研究的django项目需要用户和帐户模型。我正在使用和集成Django Rest Framework。我最初使用DRF的各个API通用视图。我正在考虑将各个通用视图转换为视图集。我能够为用户模型做到这一点。我想将帐户模型视图转换为视图集。
我的问题是我有两个版本的同一个ListAPIView用于配置文件模型。顶部视图列出了数据库中的所有帐户,第二个视图根据帐户模型中的User__Username外键列出了个人用户的所有帐户。
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。有没有办法在单个视图集中双重定义相同的视图。
我基本上想要在同一个视图集中定义我的两个Account ListAPIViews。如果可能的话,我应该怎么做呢?
答案
你可以使用@action装饰器来定义。
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)
以上是关于如何将两个不同的ListAPIView转换为单个ModelViewSet的主要内容,如果未能解决你的问题,请参考以下文章
当涉及两个以上的表时,如何将来自相似字段的单个表的两个左连接转换为 LINQ? [复制]