请参阅以下代码:
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_url
和CourseDeleteView
属性,我可以覆盖DeleteView
中的属性。这样两个属性就可以通过调用DeleteView
中的方法生效。
让我困惑的是为什么我可以通过上面的代码将model = Course
中的属性OwnerCourseMixin
转移到DeleteView
。他们之间没有直接的继承关系。这对我没用。
答案 0 :(得分:0)
您不会将model
属性转移到DeleteView
,而只转移到CourseDeleteView
,因为这是继承自OwnerCourseMixin
的类。
如果你实例化了DeleteView
,那么这个实例就不会有model = Course
,因为你巧妙地说,它们之间没有直接的继承。但是,CourseDeleteView
的实例会model = Course
,它继承自OwnerCourseMixin
。