У меня есть сайт Django с множеством моделей и форм. У меня есть много пользовательских форм и наборов форм и наборов inlineform, а также пользовательских проверок и пользовательских наборов запросов. Следовательно, действие добавления модели зависит от форм, которым нужны другие вещи, и «модель добавления» в администраторе django пропускает 500 из пользовательского набора запросов.
Есть ли в любом случае отключить функцию «Добавить $ MODEL» для определенных моделей?
Я хочу /admin/appname/modelname/add/
выдать сообщение об ошибке 404 (или подходящее сообщение об отсутствии), я не хочу, чтобы на экране была кнопка «Добавить $ MODELNAME» /admin/appname/modelname
.
Администратор Django предоставляет способ отключить действия администратора (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions), однако единственное действие для этой модели - «delete_selected». то есть действия администратора действуют только на существующие модели. Есть ли какой-нибудь джанго-эск способ сделать это?
источник
Ответы:
Это просто, просто перегрузите
has_add_permission
метод в вашемAdmin
классе следующим образом:источник
admin.site.register(MyModel, MyModelAdmin)
Добавить все вadmin.py
папку приложения моделей.obj
параметре.По умолчанию syncdb создает 3 разрешения безопасности для каждой модели:
Если вы вошли в систему как администратор, вы получите ВСЕ, несмотря ни на что.
Но если вы создаете новую группу пользователей под названием «Общий доступ» (например), вы можете назначить ТОЛЬКО разрешения ИЗМЕНИТЬ и УДАЛИТЬ для всех ваших моделей.
Тогда любой зарегистрированный пользователь, который является членом этой группы, не будет иметь разрешения «Создать», ничего не связанного с ним не будет отображаться на экране.
источник
Я думаю, что это поможет вам .. ниже код должен быть в файле admin.py
В дополнение к вышесказанному, как опубликовано
источник
Просто скопируйте код из другого ответа
В моем случае я использую inline
в
service = formset.form.base_fields['service']
base_fields
это поля, определенные в моделиесли определено в форме, используйте:
product = formset.form.declared_fields['product']
смотрите также
источник
base_fields
иdeclared_fields
это самое важное, что я узнал из этого дела.Это слишком запоздалый ответ; Просто разместите это, как будто кто-то находит то же самое решение.
В файле admin.py вы можете сделать следующее:
Здесь «readonly_fields» делает волшебство. Спасибо.
источник