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 110

3 ответа:

Это легко, просто перегрузка has_add_permission метод Admin класс вот так:

class MyAdmin(admin.ModelAdmin):
     def has_add_permission(self, request, obj=None):
        return False

по умолчанию syncdb создает 3 разрешения безопасности для каждой модели:

  1. создать (или добавить)
  2. изменить
  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 " делает магию. Спасибо.