2010-11-10 8 views
99

J'ai un site django avec beaucoup de modèles et de formulaires. J'ai beaucoup de formes et de formsets faits sur commande et en ligneformsets et de validation personnalisée et de querysets personnalisés. Par conséquent, l'action add model dépend de formulaires qui ont besoin d'autres choses, et le 'add model' dans l'admin django passe par 500 à partir d'un ensemble de requêtes personnalisé.Django Admin - Désactiver l'action 'Ajouter' pour un modèle spécifique

Est-il possible de désactiver la fonctionnalité 'Add $ MODEL' pour certains modèles?

Je veux /admin/appname/modelname/add/ pour donner un 404 (ou un message d'erreur approprié), je ne veux pas que le bouton 'Add $ MODELNAME' soit sur la vue /admin/appname/modelname. L'administrateur Django permet de désactiver les actions d'administration (http://docs.djangoproject.com/fr/dev/ref/contrib/admin/actions/#disabling-actions), mais la seule action pour ce modèle est ' supprimer sélectionnée'. c'est-à-dire que les actions d'administration agissent uniquement sur des modèles existants. Y a-t-il un moyen django-esque de le faire?

+0

FYI: 'actions' dans l'admin django sont les listes déroulantes qui s'appliquent dans la vue liste des modifications aux lignes cochées de la liste. –

+1

Question connexe (mais différente): http://stackoverflow.com/questions/1721037/remove-add-another-in-django-admin-screen – user9876

Répondre

248

Il est facile, il suffit de surcharger la méthode de has_add_permission dans votre classe Admin comme ceci:

class MyAdmin(admin.ModelAdmin): 
    def has_add_permission(self, request): 
     return False 
+6

Cela n'a pas fonctionné pour moi. Le bouton "Ajouter un modèle" s'affiche toujours sur la page de liste des modifications du modèle. – Cerin

+2

Toujours travaille pour moi en 2016 avec Django 1.9. Merci! – lsh

+0

où écrire ce code? – user5319825

5

Par syncdb par défaut crée 3 autorisations de sécurité pour chaque modèle:

  1. Créer (ajouter aka)
  2. Modifier
  3. Supprimer

Si vous êtes connecté en tant qu'administrateur, vous obtenez TOUT n'importe quoi.

Mais si vous créez un nouveau groupe d'utilisateurs appelé « accès général »(par exemple) alors vous pouvez affecter uniquement le modifier et supprimer des autorisations pour tous vos modèles.

Ensuite, tout utilisateur connecté qui est membre de ce groupe n'aura pas l'autorisation "Créer", rien de ce qui apparaîtra à l'écran.