我有以下类层次结构:

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)


问题在于,由于某种原因,当以下情况时,字段“ model = Event”对于框架是不可见的
它尝试使用UpdateEventView。所以我得到了错误:

UpdateEventView缺少查询集。定义UpdateEventView.model,UpdateEventView.queryset或覆盖UpdateEventView.get_object()。

我想念什么?

免责声明:我是Python / Django的新手。

最佳答案

所以我的问题有点愚蠢...
问题是按混合顺序:

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


必须替换为:

class UpdateEventView( EventViewMixin, ProfileUpdateView ):


这是因为ProfileUpdateView在其继承树中具有一个字段“ model = None”,
并且如果ProfileUpdateView在中的第一个位置,则是
会被考虑。如果首先出现EventViewMixin,则采用正确的值。

关于python - 无法理解Django和mixin行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13414247/

10-13 02:07