在阅读Django Unleashed一书时,我遇到了这段代码。我想知道为什么NewsLinkGetObjectMixin可以访问类变量startup_slug_url_kwarg,它是在另一个基类StartupContextMixin中定义的?
class NewsLinkGetObjectMixin():
def get_object(self, queryset=None):
startup_slug = self.kwargs.get(
self.startup_slug_url_kwarg)
newslink_slug = self.kwargs.get(
self.slug_url_kwarg)
return get_object_or_404(
NewsLink,
slug__iexact=newslink_slug,
startup__slug__iexact=startup_slug)
class StartupContextMixin():
startup_slug_url_kwarg = 'startup_slug'
startup_context_object_name = 'startup'
def get_context_data(self, **kwargs):
startup_slug = self.kwargs.get(
self.startup_slug_url_kwarg)
startup = get_object_or_404(
Startup, slug__iexact=startup_slug)
context = {
self.startup_context_object_name:
startup,
}
context.update(kwargs)
return super().get_context_data(**context)
class NewsLinkCreate(NewsLinkGetObjectMixin, StartupContextMixin, CreateView):
答案 0 :(得分:0)
从几个基类继承一个类时,继承的类可以访问基类的所有属性。
NewsLinkCreate
继承自NewsLinkGetObjectMixin
和StartupContextMixin
。因此,当您在get_object
实例上调用方法NewsLinkCreate
时,它可以访问NewsLinkGetObjectMixin
和StartupContextMixin
中的变量,因为NewsLinkCreate
是从这两个类继承的。两个mixin的所有属性都会添加到类NewsLinkCreate
。