【问题标题】:Can not understand Django and mixin behaviour无法理解 Django 和 mixin 行为
【发布时间】:2012-11-16 10:02:39
【问题描述】:

我有以下类层次结构:

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 的新手。

【问题讨论】:

标签: python django django-generic-views


【解决方案1】:

所以我的问题有点愚蠢...... 问题出在 mixins 的顺序上:

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

必须替换为:

class UpdateEventView( EventViewMixin, ProfileUpdateView ):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 2020-01-02
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多