请参考以下代码:
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_name
和success_url
属性,我可以在DeleteView
中覆盖该属性。以便通过调用DeleteView
中的方法使这两个属性生效。
让我感到困惑的是,为什么我可以将OwnerCourseMixin
中的属性model = Course
转移到上面的代码中DeleteView
。它们之间没有直接的继承关系。这对我来说毫无意义。
您不会将model
属性转移到DeleteView
,而只会转移到CourseDeleteView
,因为这是继承自OwnerCourseMixin
的类。
如果你实例化了DeleteView
,该实例就不会model = Course
,因为正如你巧妙地说的那样,它们之间没有直接的继承。然而,CourseDeleteView
的实例将具有model = Course
,它继承自OwnerCourseMixin
。