django просмотр шаблона на основе проблемы с PermissionRequieredMixin - PullRequest
0 голосов
/ 30 марта 2020

Я новичок в Django. Я пытаюсь "переопределить" license_required для наследования представления. Пример:

class ValetView(PermissionRequieredMixin, View):
    permission_required = ('lav.add_valets')

это отлично работает. Если я go на это представление, оно работает в зависимости от /admin установленных разрешений. Но теперь мне нужно разделить разрешение в ADD и EDIT, поэтому я создал это представление, наследуемое от базы:

class ValetsEditView(ValetsView)
    ValetsView.permission_required = ('lav.edit_valets')

Когда я пытаюсь получить доступ к любому из двух, он говорит: разрешение запрещено, но я разрешаю пользователю только функция редактирования, а не добавить. Как я могу дать разрешение только на редактирование ??

Надеюсь, это понятно. Спасибо!

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Как сказал Виллем, проблема в ValetsView.permission_required. Это должно быть просто permission_required. Полный код:

class ValetView(PermissionRequieredMixin, View):
    permission_required = 'lav.add_valets'


class ValetsEditView(ValetsView)
    permission_required = 'lav.edit_valets'

Теперь это должно работать для вас. Я также удалил круглые скобки вокруг разрешений, так как они не служили цели.


Что-то, что вы не просили

Следующее также было бы допустимым, поскольку Django поддерживает указание последовательности кортежей. Обратите внимание на конечный , ниже, который требуется для указания кортежа из одного значения в Python:

class ValetView(PermissionRequieredMixin, View):
    permission_required = ('lav.add_valets',)


class ValetsEditView(ValetsView)
    permission_required = ('lav.edit_valets',)

В вашем коде у вас было ('lav.edit_valets') (без завершающего ,), который python не интерпретирует как кортеж, скорее он просто удаляет скобки и видит его как строку 'lav.edit_valets'. Просто один из тех маленьких причуд.

0 голосов
/ 30 марта 2020

Ваш исходный код ValetsView.permission_required = ('lav.edit_valets') является , изменяющим родительского представления permission_required. Измените его на следующее:

class ValetsEditView(ValetsView)
    permission_required = ('lav.edit_valets')
...