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

时间:2016-12-06 17:42:48

标签: python multiple-inheritance mixins django-class-based-views

请参阅以下代码:

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')

我很容易理解,通过在template_name中添加success_urlCourseDeleteView属性,我可以覆盖DeleteView中的属性。这样两个属性就可以通过调用DeleteView中的方法生效。

让我困惑的是为什么我可以通过上面的代码将model = Course中的属性OwnerCourseMixin转移到DeleteView。他们之间没有直接的继承关系。这对我没用。

1 个答案:

答案 0 :(得分:0)

您不会将model属性转移到DeleteView,而只转移到CourseDeleteView,因为这是继承自OwnerCourseMixin的类。

如果你实例化了DeleteView,那么这个实例就不会有model = Course,因为你巧妙地说,它们之间没有直接的继承。但是,CourseDeleteView的实例会model = Course,它继承自OwnerCourseMixin