Django Admin-отключить действие "добавить" для конкретной модели
у меня есть сайт django с большим количеством моделей и форм. У меня есть много пользовательских форм и наборов форм и inlineformsets и пользовательской проверки и пользовательских запросов. Следовательно, действие добавить модель зависит от форм, которые нуждаются в других вещах, и "добавить модель" в Администраторе django через 500 из пользовательского набора запросов.
есть ли в любом случае, чтобы отключить функцию "Добавить $MODEL" для определенных моделей?
Я хочу /admin/appname/modelname/add/
чтобы дать сообщение об ошибке 404 (или подходящее сообщение об ошибке "уйти"), I не хочу, чтобы кнопка "Добавить $MODELNAME" была включена /admin/appname/modelname
вид.
Django admin предоставляет способ отключить действия администратора (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions) однако единственным действием для этой модели является 'delete_selected'. т. е. действия администратора действуют только на существующих моделях. Есть ли какой-то Джанго-ЭСК способ сделать это?
3 ответа:
Это легко, просто перегрузка
has_add_permission
методAdmin
класс вот так:class MyAdmin(admin.ModelAdmin): def has_add_permission(self, request, obj=None): return False
по умолчанию syncdb создает 3 разрешения безопасности для каждой модели:
- создать (или добавить)
- изменить
- удалить
Если вы вошли в систему как администратор, вы получаете все несмотря ни на что.
но если вы создадите новый группы пользователей под названием "Общий Доступ"(пример) затем вы можете назначить только разрешения на изменение и удаление для всех ваших модели.
тогда любой зарегистрированный пользователь, который является членом этой группы, не будет иметь разрешения "создать", ничего связанного с ним не будет отображаться на экране.
Это слишком запоздалый ответ; просто разместите это, как будто кто-то находит то же самое решение.
In admin.py файл вы можете сделать следующее:
class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = '__all__' class MyModelAdmin(admin.ModelAdmin): form = QuestionTrackAdminForm list_display = ['title', 'weight'] readonly_fields = ['title', 'weight'] admin.site.register(MyModel, MyModelAdmin)
здесь," readonly_fields " делает магию. Спасибо.