Django Admin - désactiver l'édition et supprimer les boutons "Enregistrer" pour un modèle spécifique
J'ai un Django Modèle que je veux être uniquement en lecture seule. Aucun ajoute et modifie le permis.
J'ai marqué tous les champs en lecture seule et remplacé has_add_permission dans ModelAdmin:
class SomeModelAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
Est-il similaire has_edit_permission
? Qui peut être désactivé pour les supprimer "enregistrer" et "Enregistrer et continuer" boutons? Et de le remplacer par un simple "Fermer et Retourner".
Documentation De Django Ne mentionne seulement à propos de lire uniquement les champs qui ne sont pas sur le remplacement des autorisations de modification.
source d'informationauteur jerrymouse
Vous devez vous connecter pour publier un commentaire.
Remplacer la
templates/admin/submit_line.html
modèle et rendre les boutons que vous voulez. Vous pouvez le faire uniquement pour le modèle spécifique, en le mettant danstemplates/admin/[app_label]/[model]/submit_line.html
.Conditionnelle, montrer le défaut de soumettre ou à un envoi personnalisé de ligne, remplacer
ModelAdmin.change_view
et ajouter un booléen àextra_context
:Mise à jour de réponse à l'aide de Django 1.8 (Python 3 de la syntaxe).
Il y a trois choses à faire:
1) étendre l'admin de changer de modèle de formulaire, l'ajout d'un
if
conditionnelle, supprimer les boutons de soumission2) remplacer
admin.ModelAdmin.change_view()
et d'établir un contexte var pour le modèleif
à lire3) interdire indésirables
POST
demandes (de DOM piratage, curl/Facteur)MyProject/my_app/templates/admin/my_app/change_form.html
MyProject/my_app/admin.py (MyModelAdmin)
Pour Django 1.11:
J'ai eu le même problème. Je l'ai corrigé dans admin.py
Dans MyModelAdmin catégorie, ajouter la fonction suivante
J'ai eu le même problème - la façon la plus simple pour ce faire est d'inclure certaines personnalisé JS.
En vous admin.py fichier include
Puis dans votre admin.js fichier, sont les suivants JS.
La ligne disparaît - il faut travailler dans toutes les versions de Django trop.
Vous pouvez essayer ce package Django Admin D'Autorisation D'Affichage. Ce paquet ajoute un
view permission
pour les modèles mentionnés poignées et les autres trucs automatiquement.Basé sur l'excellent réponse de @mat_gesselvoici ma solution:
Les principales différences sont les UX y:
HttpResponseForbidden
pour empêcher un enregistrement de laAussi:
read_only
est un utile, non-invasive de l'améliorationrequest.method != 'GET'
pour éviterPATCH
et amis (pas tout à fait sûr si cela est nécessaire, tbh)my_app/admin.py
admin/change_form.html
(Testé sur Django 1.9: heads up: certaines importations ont déménagé depuis, par exemple,
reverse
)