Existe-t-il un moyen de supprimer la fonctionnalité "Ajouter" sur le site d'administration de Django? Pour certaines entités, je veux seulement que l'administrateur Django puisse les voir ou modifier celles qui existent déjà, mais pas en ajouter de nouvelles.Supprimer la fonctionnalité "Ajouter" dans l'administrateur Django
Répondre
Bien sûr, vous pouvez personnaliser admin très granulairement en suivant les instructions here - Je crois que ce que vous voulez peut être obtenu en partie en remplaçant ModelAdmin.save_model(self, request, obj, form, change)
dans votre propre ModelAdmin
sous-classe, pour assurer que rien ne se passe sur le magasin quand change
est faux (c'est-à-dire une tentative d'ajout plutôt que de modification), et en partie en surchargeant ModelAdmin.add_view(self, request, form_url='', extra_context=None)
pour afficher une "vue d'ajout" qui indique clairement à l'administrateur qu'il ne sera pas autorisé à ajouter d'objet via cette route. Je n'ai pas réellement fait la personnalisation d'admin spécifique dont vous avez besoin, mais j'en ai fait d'autres et ils semblent fonctionner très bien!
Vous pouvez personnaliser l'autorisation pour chaque groupe d'utilisateurs à partir de l'interface d'administration: essayez d'aller à /admin/auth/group
et il devrait être simple à partir de là.
Ce ne sera pas aussi granulaire que la solution offerte par la réponse précédente, mais il prendra en charge la plupart de vos besoins sans avoir besoin de personnaliser l'administrateur.
Mais comme l'OP veut spécifiquement empêcher * l'administrateur * de faire certaines choses, comme la question l'indique si clairement, comment va-t-il empêcher l'administrateur d'annuler les changements d'autorisation (en particulier s'il veut autoriser l'administrateur FAIRE un peu d'administration ;-)? –
@Alex: C'est vrai - je voulais dire ma réponse comme une alternative plus simple à votre réponse, mais la simplicité vient avec des limites bien sûr. – anschauung
Si vous modifiez les autorisations pour restreindre l'accès, vous obtiendrez toujours le signe plus par un champ FK/MtM. En cliquant sur ce qui ouvre une fenêtre popup avec «Permission Denied» en elle.
Vous pouvez réellement supprimer complètement le signe plus en n'imposant pas simplement le modèle avec l'admin.
J'ai une situation où j'ai des catégories prédéfinies que je veux que les utilisateurs puissent en sélectionner plus d'un. La meilleure façon de le faire est avec un champs models.ManyToMany. Vous pouvez enregistrer le modèle avec l'administrateur, entrer les données selon les besoins, puis supprimer l'enregistrement.
Voir: Django Admin - Disable the 'Add' action for a specific model pour la vraie solution.
Une manière simple et efficace consiste à définir max_num=0
pour cette ligne particulière.
La suggestion de Satya de définir max_num = 0 fonctionne parfaitement.
par la documentation de Django sur la classe ModelForm:
Pour les utilisateurs avec les navigateurs compatibles JavaScript, un « Ajouter une autre » lien est fourni pour permettre un certain nombre de inline supplémentaires à ajouter, en plus de celles prévues à la suite de l'argument supplémentaire.
Le lien dynamique n'apparaîtra pas si le nombre de formulaires actuellement affichés dépasse la valeur max_num ou si l'utilisateur n'a pas activé JavaScript.
et
Comme formsets régulièrement, vous pouvez utiliser le MAX_NUM et des paramètres supplémentaires à modelformset_factory pour limiter le nombre de formulaires supplémentaires affichés.
MAX_NUM ne l'empêche pas d'objets existants d'être affiché
- 1. Django ajouter/supprimer un formulaire sans soumettre plusieurs
- 2. Problème avec PyAMF, Django et la fonctionnalité "propriété" de Python
- 3. Comment ajouter une fonctionnalité de recherche à mon application
- 4. Annuler la fonctionnalité dans un href
- 5. Comment implémenter la fonctionnalité Zip dans VBA?
- 6. Problème dans la fonctionnalité de partage facebook
- 7. ajouter une requête à la méthode du modèle django?
- 8. Comment modifier et supprimer des données dans Django?
- 9. Mini barre d'outils Cocoa sous la table (ajouter, supprimer)
- 10. admin Django, erreur de supprimer l'utilisateur
- 11. L'action d'administration par défaut "supprimer sélectionné" dans Django
- 12. Django: Comment supprimer des Inlines dynamiquement?
- 13. Comment ajouter mon application Django sur Facebook?
- 14. Comment implémenter la fonctionnalité back dans une page web asp.net?
- 15. google maps: veux ajouter/supprimer GEvent Listener à la carte
- 16. Incendie d'un événement lorsque la collection Changé (ajouter ou supprimer)
- 17. Ajouter des rapports à l'administrateur de Django
- 18. Comment ajouter manytomanyfields bi-directionnel dans l'admin django?
- 19. Comment ajouter un utilisateur à django-tagging
- 20. Ajax rafraîchit la fonctionnalité jqModal
- 21. Comment ajouter un widget d'administration inline personnalisé dans Django?
- 22. Django: Ajouter le nombre de résultats
- 23. Meilleur moyen d'écrire un programme Python avec accès à la fonctionnalité de base de données Django
- 24. Automatiser « Ajouter à la page d'accueil » fonctionnalité pour un iPhone Web App
- 25. Scriptaculous Ajax.Autocompleter fonctionnalité supplémentaire dans LI
- 26. flex fonctionnalité vdividedbox dans silverlight
- 27. Fonctionnalité JQuery TypeWatch dans Delphi
- 28. Comment ajouter une entrée dans 'ajouter/supprimer des programmes' pour une application Windows .net
- 29. Fonctionnalité Flex/Bison dans PHP
- 30. URLconfs dans Django
Merci pour la réponse. J'espérais un paramètre qui accomplirait cela, la façon dont la propriété save_as ModelAdmin fonctionne. –
Je ne suis pas au courant de ces paramètres en stock Django 1.0, mais peut-être il y a quelques bidouille 1.0 et/ou contrib pour le fournir - stock 1.0.quelque chose est ce que j'ai collé jusqu'à présent (surtout parce qu'il fonctionne bien sur moteur d'application, j'avoue ;-). –
Cette réponse surcomplique les choses. Suppression des utilisateurs Ajouter Permission fait parfaitement l'affaire pour la situation que vous avez décrite. (En supposant que vous avez seulement besoin de le contrôler par modèle et non par instance.) –