我有以下类层次结构:
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/