python - 无法理解 Django 和 mixin 行为

标签 python django django-generic-views

我有以下类层次结构:

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

最佳答案

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

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

必须替换为:

class UpdateEventView( EventViewMixin, ProfileUpdateView ):

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

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

相关文章:

python - 可以在共享托管 Web 服务器上使用 websockets 吗?

python - Ubuntu 22.04 上的 Django mod_wsgi Apache 错误 403 Forbidden

django - 为通用 get_context_data 扩展通用 View 类

python - 从基于类的通用 View 手动获取响应

python - 使用 Pandas/Python 为列中的重复项生成唯一值

python - 将默认值与 kwargs 合并,有更好的语法吗?

python - 当我使用 BeautifulSoup .findAll 时如何获取下一个 div?

python - Graphql Django 获取嵌套对象属性的最佳方法

django - AWS S3和Django返回 "An error occurred (AccessDenied) when calling the PutObject operation"

python - Django 通用 View 中 get_context_data 和 queryset 之间的区别?