2012-11-16 29 views
1

我有類層次結構如下:無法理解Django和混入行爲

class ProfileUpdateView(UpdateView, LoggerMixin): 

    def get_context_data(self, **kwargs): 
     context = super(ProfileCreateView, self).get_context_data(**kwargs) 
     ... 
     return context 

的UpdateView其實django.views.generic.UpdateView

class EventViewMixin(object): 
    template_name = ... 
    model = Event 
    form_class = ... 

    def get_success_url(self): 
     return self.success_url + str(self.object.id) 

類UpdateEventView混合ProfileUpdateView和EventViewMixin

class UpdateEventView(ProfileUpdateView, EventViewMixin): 

    def form_valid(self, form): 
     ... 
     return super(UpdateEventView, self).form_valid(form) 

問題在於,由於某些原因字段「模型=事件」是它在嘗試使用UpdateEventView時 對框架不可見。所以我得到的錯誤:

UpdateEventView缺少一個查詢集。定義UpdateEventView.model,UpdateEventView.queryset或覆蓋UpdateEventView.get_object()。

我錯過了什麼?

免責聲明:我是Python/Django的新手。

+0

有人預言這會發生:http://reinout.vanrees.org/weblog/2011/08/23/class-based-views.html :-) –

回答

1

所以我在有點啞...... 問題問題是,在混入的順序:

class UpdateEventView(EventViewMixin, ProfileUpdateView): 

這是因爲ProfileUpdateView有:

class UpdateEventView(ProfileUpdateView, EventViewMixin): 
    .... 

必須被替換其繼承樹的字段「model = None」, 並且如果ProfileUpdateView位於第一個位置,那麼將會考慮 的值。如果EventViewMixin先來,那麼正確的值被採取。