1

S'il vous plaît se référer au code suivant:concept de substitution d'attribut dans l'héritage multiple (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') 

je pourrais facilement comprendre qu'en ajoutant template_name et success_url attribut dans CourseDeleteView, je pouvais passer outre l'attribut dans DeleteView. Pour que les deux attributs prennent effet en appelant la méthode dans DeleteView.

Ce qui m'a rendu confus est pourquoi je pourrais transférer l'attribut model = Course dans OwnerCourseMixin à DeleteView par le code ci-dessus. Il n'y a pas de relation d'héritage directe entre eux. Ça n'a aucun sens.

Répondre

0

Vous ne transférez pas l'attribut model à DeleteView, mais uniquement à CourseDeleteView, car il s'agit de la classe qui hérite de OwnerCourseMixin.

Si vous instanciez DeleteView, cette instance n'aurait pas model = Course puisque, comme vous l'avez indiqué, il n'y a pas d'héritage direct entre eux. Cependant, une instance de CourseDeleteView aurait model = Course, dont elle a hérité de OwnerCourseMixin.

+0

C'est clair, merci beaucoup. – JianWei