Question

    

Cette question a déjà une réponse ici:

         

Existe-t-il un moyen de supprimer le " Ajouter " fonctionnalité sur le site d'administration de Django? Pour certaines entités, je souhaite uniquement que l'administrateur Django puisse les visualiser ou modifier celles existantes, sans en ajouter de nouvelles.

Était-ce utile?

La solution

Bien sûr, vous pouvez personnaliser l’ADMIN très finement en suivant les instructions ici - 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 s’assurer que rien ne se passe sur le magasin lorsque change est faux (c’est-à-dire une tentative d’ajout plutôt que de modification), et en partie en substituant ModelAdmin.add_view (self, request, form_url = ' ', extra_context = None) pour afficher un " add view " cela indique très clairement à l'administrateur qu'il ne sera PAS autorisé à ajouter un objet via cette route. Je n'ai pas encore effectué la personnalisation administrative spécifique dont vous avez besoin, mais j'en ai fait d'autres et elles semblent fonctionner assez bien!

Autres conseils

Vous pouvez personnaliser les autorisations pour chaque groupe d'utilisateurs à partir de l'interface d'administration: essayez d'aller à / admin / auth / groupe et le résultat devrait être simple.

Cela ne sera pas aussi granulaire que la solution proposée par la réponse précédente, mais elle répondra à la plupart de vos besoins sans qu'il soit nécessaire de personnaliser l'administrateur.

Si vous modifiez les autorisations pour restreindre l'accès, vous obtiendrez toujours le signe plus par un champ FK / MtM. En cliquant dessus, une fenêtre contextuelle contenant le message "Permission Denied" apparaîtra.

Vous pouvez réellement supprimer complètement le signe plus en ne vous contentant pas d'enregistrer le modèle auprès de l'administrateur.

Dans certaines situations, je souhaite que les utilisateurs puissent sélectionner plusieurs catégories. La meilleure façon de procéder consiste à utiliser un champ models.ManyToMany. Vous pouvez enregistrer le modèle auprès de l’administrateur, saisir les données requises, puis supprimer l’enregistrement.

Une méthode simple et efficace consiste à définir max_num = 0 pour cet inline particulier.

La suggestion de Satya de définir max_num = 0 fonctionne parfaitement.

Selon les documents Django sur la classe ModelForm:

  

Pour les utilisateurs dotés de navigateurs JavaScript, un " Ajouter un autre " Ce lien vous permet d'ajouter un nombre illimité d'inlines en plus de celles fournies à la suite de l'argument supplémentaire.

     

Le lien dynamique n'apparaîtra pas si le nombre de formulaires actuellement affichés dépasse max_num ou si l'utilisateur n'a pas activé JavaScript.

et

  

Comme avec les formulaires ordinaires, vous pouvez utiliser les paramètres max_num et extra pour modelformset_factory afin de limiter le nombre de formulaires supplémentaires affichés.

     

max_num n'empêche pas l'affichage des objets existants

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top