DRF 视图的方法继承

问题描述 投票:0回答:1

考虑:

class CourseListViewBase():
   def list(self, request, format=None):
      # whatever

class CourseListView(generics.ListAPIView, CourseListViewBase):
   permission_classes = [IsAuthenticated]
   def list(self, request, format=None): # Why can't I omit this?
      return CourseListViewBase.list(self, request, format)

class CourseListViewGuest(generics.ListAPIView, CourseListViewBase):
   permission_classes = []
   authentication_classes = []
   def list(self, request, format=None): # Why can't I omit this?
      return CourseListViewBase.list(self, request, format)

为什么我必须在派生类中定义

list
方法而不是依赖它从基类继承?如果我不定义它,我会收到这样的警告:

AssertionError: 'CourseListViewGuest' 应该包含一个

queryset
属性,或者覆盖
get_queryset()
方法。

python django django-rest-framework multiple-inheritance
1个回答
0
投票

问题出在我列出基类的顺序上。似乎

generics.ListAPIView
也定义了一个(退化的)
list
方法。所以,这有效:

class CourseListViewBase():
   def list(self, request, format=None):
      # whatever

class CourseListView(CourseListViewBase, generics.ListAPIView):
   permission_classes = [IsAuthenticated]

class CourseListViewGuest(CourseListViewBase, generics.ListAPIView):
   permission_classes = []
   authentication_classes = []
© www.soinside.com 2019 - 2024. All rights reserved.