我有一个正在处理的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。如果可能的话我应该怎么做?
答案 0 :(得分:0)
您可以使用@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)