Я относительно новичок в python / django и не уверен, что все делаю правильно
Предположим, есть 2 разных приложения projects
и items
.URL, который у меня есть в приложении items
:
path('projects/<slug:project_slug>/items/', ItemListView.as_view())
И просмотр cb:
class ItemListView(CanViewProjectMixin, ListView):
model = Item
def get(self, request, *args, **kwargs):
self.project = Project.objects.get(slug=kwargs.get('project_slug'))
return super(ItemListView, self).get(request, *args, **kwargs)
def get_context_data(self, *, object_list=None, **kwargs):
context = super(ItemListView, self).get_context_data(**kwargs)
context['project'] = self.project
return context
Кажется, что это хорошо работает в представлениии он передает объект project
в шаблон через context
Однако я не могу получить self.project
в методе CanViewProjectMixin.dispatch()
.
Любая помощьприветствуется
Обновление
CanViewProjectMixin
имеет метод get_permission_object()
, который извлекает объект project
в основных представлениях приложения проекта, где извлекается project
по умолчанию get_object()
или через self.project
, где представление является дочерним для project
, как в примере выше.
def get_permission_object(self):
if hasattr(self, 'project'):
return self.project
return (hasattr(self, 'get_object') and self.get_object() or
getattr(self, 'object', None))
def dispatch(self, request, *args, **kwargs):
self.object = self.get_permission_object()
...
# do stuff with the object and return super()
В представлениях проекта, где project
извлекается через get_object()
, оно работаетпросто отлично, проблема только в дочерних взглядах