多重继承中的属性覆盖概念(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的类。

如果你实例化了DeleteView,该实例就不会model = Course,因为正如你巧妙地说的那样,它们之间没有直接的继承。然而,CourseDeleteView的实例将具有model = Course,它继承自OwnerCourseMixin

最新更新