2009-08-02 7 views

Répondre

3

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!

+0

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. –

+0

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 ;-). –

+1

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.) –

3

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.

+2

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 ;-)? –

+0

@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

2

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.

1

Une manière simple et efficace consiste à définir max_num=0 pour cette ligne particulière.

0

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é

Questions connexes