多重继承中的属性覆盖概念(Django-Mixin)

attribute override concept in multiple inheritance (Django-Mixin)

请参考以下代码:

from django.views.generic.edit import DeleteView
from .models import Course

class OwnerMixin(object):
    def get_queryset(self):
        qs = super(OwnerMixin, self).get_queryset()
        return qs.filter(owner=self.request.user)    

class OwnerCourseMixin(OwnerMixin):
    model = Course

class CourseDeleteView(OwnerCourseMixin, DeleteView):
    template_name = 'courses/manage/course/delete.html'
    success_url = reverse_lazy('manage_course_list')

我很容易理解,通过在 CourseDeleteView 中添加 template_namesuccess_url 属性,我可以覆盖 DeleteView 中的属性。从而通过调用DeleteView.

中的方法使两个属性生效

让我很困惑的是,为什么我可以通过上面的代码将OwnerCourseMixin中的属性model = Course转移到DeleteView。它们之间没有直接的继承关系。这对我来说毫无意义。

您不会将 model 属性转移到 DeleteView,而只是转移到 CourseDeleteView,因为这是从 OwnerCourseMixin 继承的 class .

如果您实例化 DeleteView,该实例将不会有 model = Course,因为正如您巧妙地指出的那样,它们之间没有直接继承。但是,CourseDeleteView 的实例将具有 model = Course,它继承自 OwnerCourseMixin