Comment puis-je ajouter un bouton dans la page d'affichage de la liste de changement d'admin django?
Je voudrais ajouter un bouton à côté de "ajouter" bouton dans la vue liste dans le modèle pour mon modèle, puis de créer une fonction de vue où je vais faire mes trucs, et puis rediriger l'utilisateur vers d'affichage de liste.
J'ai vérifié comment la surcharge modèle d'administrateur, mais je ne comprends toujours pas, où dois-je mettre mon point de vue de la fonction, où je vais faire mes trucs, et comment puis-je m'inscrire ce point de vue en admin url.
Il y est également question au sujet de la sécurité. Je voudrais avoir de l'action à l'intérieur de l'admin, donc si u r n'êtes pas connecté, u ne peut pas l'utiliser.
J'ai trouvé ceci, mais je ne sais pas si c'est la bonne façon: http://www.stavros.io/posts/how-to-extend-the-django-admin-site-with-custom/
source d'informationauteur grafa
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que votre application est répertorié avant
'django.contrib.admin'
dansINSTALLED_APPS
.Créer un
change_list.html
modèle dans l'un des répertoires suivants:Le modèle doit être ramassé automatiquement, mais dans le cas où il n'est pas sur l'un des chemins d'accès indiqués ci-dessus, vous pouvez également pointer via un admin attribut de modèle:
Vous pouvez rechercher le contenu de l'original change_list.html il vit dans
path/to/your/site-packages/django/contrib/admin/templates/admin/change_list.html
. L'autre réponse vous montre également comment mettre en forme le modèle. Nikolai Saiko vous montre comment remplacer les parties pertinentes à l'aide de "s'étend" et "super". Résumé:Remplissons
href="..."
avec une url. L'admin url noms sont dans l'espace de noms 'admin' et peut être regardé comme ceci:Lors de l'ajout d'un bouton pour change_form.html vous avez peut-être envie de passer dans le courant id de l'objet:
Maintenant de créer une vue personnalisée. Cela peut être un affichage normal (à l'instar d'autres pages de votre site web) ou un administrateur personnalisé en vue admin.py. Le get_urls méthode sur un ModelAdmin retourne l'Url à utiliser pour que ModelAdmin de la même manière qu'un URLconf. Par conséquent, vous pouvez les étendre comme indiqué dans l'URL répartiteur:
Lire les docs sur la façon de définir des autorisations sur une vue en ModelAdmin: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls
Vous pouvez protéger votre point de vue et uniquement à donner l'accès aux utilisateurs avec le statut du personnel:
Vous pourriez également vouloir vérifier
request.user.is_active
et gérer les utilisateurs inactifs.Mise à jour: profiter du cadre et de personnaliser autant que possible. De nombreuses fois, les actions peuvent être une bonne alternative: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/actions/
Mise à jour 2: j'ai enlevé un JS exemple d'injecter un bouton côté client. Si vous en avez besoin, voir les révisions.
Ici est une autre solution , sans l'aide de jQuery (comme celui fourni par allcaps). Aussi cette solution fournit de l'objet pk avec plus intuitive 🙂
Je vais vous donner mon code source basé sur ce lien (cliquez sur le lien ci-dessus pour plus d'infos):
J'ai une application Produits avec le modèle de Produit. Ce code ajoute le bouton "Faire le Mal", qui exécute ProductAdmin.do_evil_view()
Fichier products/models.py:
auto.admin_site.admin_view est nécessaire pour s'assurer que l'utilisateur est connecté en tant qu'administrateur.
Et c'est le modèle de l'extension de la norme Django admin de la page pour changer d'entrée:
Fichier: {template_dir}/admin/products/product/change_form.html
Dans Django >= 1.8 (merci à @jenniwren pour cette info):
Si votre Django version est inférieure à 1,8vous devez écrire du code plus:
Cet emballage permet l'ajout de points de vue avec les boutons de navigation pour django admin:
https://github.com/saxix/django-admin-extra-urls