Django Admin - отключить действие «Добавить» для конкретной модели - PullRequest
136 голосов
/ 10 ноября 2010

У меня есть сайт 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». То есть действия администратора действуют только на существующие модели. Есть ли какой-то способ django-esque для этого?

Ответы [ 4 ]

312 голосов
/ 10 ноября 2010

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

class MyAdmin(admin.ModelAdmin):
     def has_add_permission(self, request, obj=None):
        return False
7 голосов
/ 21 ноября 2013

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

  1. Создать (он же добавить)
  2. Изменение
  3. Удалить

Если вы вошли в систему как администратор, вы получите ВСЕ независимо от того, что.

Но если вы создаете новую группу пользователей с именем "Общий доступ" (например) , тогда вы можете назначить ТОЛЬКО разрешения ИЗМЕНИТЬ и УДАЛИТЬ для всех ваших моделей.

Тогда любой зарегистрированный пользователь, являющийся членом этой группы, не будет иметь разрешения «Создать», на экране ничего не будет отображаться.

2 голосов
/ 07 апреля 2019

Я думаю, что это поможет вам .. код ниже должен быть в файле admin.py

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('name', )
    list_filter = ('name', )
    search_fields = ('name', )
    list_per_page = 20

    # This will help you to disbale add functionality
    def has_add_permission(self, request):
        return False

    # This will help you to disable delete functionaliyt
    def has_delete_permission(self, request, obj=None):
        return False
0 голосов
/ 15 апреля 2018

Это слишком запоздалый ответ; Просто отправьте это, как будто кто-то находит то же самое решение.

В файле 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" делает магию. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...