Ответ 1
Это просто, просто перегрузите метод has_add_permission
в вашем классе Admin
следующим образом:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
У меня есть сайт django с большим количеством моделей и форм. У меня есть множество настраиваемых форм и форм, а также встроенные формы и пользовательские проверки и пользовательские запросы. Следовательно, действие add model зависит от форм, которым нужны другие вещи, и "add model" в admin django через 500 из пользовательского набора запросов.
Можно ли отключить функцию "Добавить $MODEL" для определенных моделей?
Я хочу, чтобы /admin/appname/modelname/add/
выдал сообщение об ошибке 404 (или подходящее "уйти" ), я не хочу, чтобы кнопка "Добавить $MODELNAME" отображалась в /admin/appname/modelname
.
Django admin предоставляет способ отключения действий администратора (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions), однако единственным действием для этой модели является "delete_selected". т.е. действия администратора действуют только на существующие модели. Есть ли способ django-esque сделать это?
Это просто, просто перегрузите метод has_add_permission
в вашем классе Admin
следующим образом:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
По умолчанию syncdb создает 3 разрешения безопасности для каждой модели:
Если вы вошли в систему под именем Admin, вы получите ВСЕ, независимо от того, что.
Но если вы создаете новую группу пользователей с именем "Общий доступ" (например), вы можете назначить ТОЛЬКО разрешения CHANGE и DELETE для всех ваших моделей.
Тогда любой зарегистрированный пользователь, входящий в эту группу, не будет иметь разрешение "Создать", на нем ничего не будет отображаться.
Я думаю, что это поможет вам.. приведенный ниже код должен быть в файле 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
# In admin
# make the related field can't be added
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['service'].widget.can_add_related = False
return form
# In inline formset e.g. admin.TabularInline
# disable all
def get_formset(self, request, obj=None, **kwargs):
formset = super().get_formset(request, obj, **kwargs)
service = formset.form.base_fields['service']
service.widget.can_add_related = service.widget.can_change_related = service.widget.can_delete_related = False
return formset
в service = formset.form.base_fields['service']
base_fields
- поля, определенные в модели
если определено в форме, используйте:
product = formset.form.declared_fields['product']
Это слишком запоздалый ответ; Просто опубликуйте это, как если бы кто-то нашел такое же решение.
В файле 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 делает магию. Благодарю.