考虑:
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()
问题出在我列出基类的顺序上。似乎
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 = []