Créer des boutons personnalisés dans admin change_form dans Django
Je veux ajouter des boutons personnalisés pour ajouter/changer de forme à l'interface d'administration. Par défaut, il y a seulement trois:
- Enregistrer et ajouter un autre
- Enregistrer et continuer à éditer
- Enregistrer
J'ai créé quelques méthodes personnalisées dans mon forms.py
fichier, et je veux créer des boutons pour appeler ces méthodes. J'ai utilisé de l'extrait de http://djangosnippets.org/snippets/1842/mais ce n'est pas exactement ce que je veux. Celui-ci permet de créer des boutons et des méthodes d'appel de la admin.py
fichier et pas forms.py
.
Est-il un moyen de le faire?
C'est mon admin.py
code:
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields = { "alias": ("title",) }
form = CategoryForm
admin.site.register(Category, CategoryAdmin)
Et mon forms.py
code,
class CategoryForm(forms.ModelForm):
"""
My attributes
"""
def custom_method(self):
print("Hello, World!")
Comment puis-je créer un bouton qui appelle "custom_method()"?
source d'informationauteur bnabilos
Vous devez vous connecter pour publier un commentaire.
Vous pouvez remplacer
admin/change_form.html
. Copie de la version encontrib.admin.templates
dans votre projet. Le mien estmyproject/templates/admin/change_form.html
mais vous pouvez utiliser/myproject/myapp/templates/admin/change_form.html
.Ensuite, modifier la copie et modifier les deux références pour le modèle existant de la balise,
{% submit_row %}
pour pointer vers votre propre modèle de balise,{% my_template_tag %}
.De la Base de votre modèle d'étiquette sur la
contrib.admin
's{% submit_row %}
mais modifier le code HTML du modèle de contenir des boutons que vous souhaitez afficher.La manière la plus simple que j'ai trouvée pour ajouter des boutons pour ajouter une autre ligne pour les boutons personnalisés. Créer un dossier "admin" dans votre modèle de dir en fonction de vos besoins. Par exemple, j'ai l'habitude d'ajouter des boutons pour les modèles spécifiques à un modèle personnalisé. Faire un "templates/admin/app/model/" répertoire.
Puis ajoutez un fichier change_form.html.
Le code avant de le
{{ block.super }}
est inspiré par le submit_line.html modèle utilisé par le modèle de la balise{% submit_row %}
. Je préfère cette méthode car elle est simple, mais vous devez vivre avec une autre rangée de boutons.Les boutons de soumission à un changement de forme sont rendus par le
submit_row
balise de modèle. Cette balise rend le modèleadmin/submit_line.html
. Puisque vous voulez ajouter à l'existant boutons, votre meilleur (et plus secs) approche consiste à substitueradmin/submit_line.html
.Par exemple, créer un fichier
my_project/templates/admin/submit_line.html
avec le contenu suivant:Plupart de ce qui est ci-dessus a été copié à partir de
django/contrib/admin/templates/submit_line.html
. Vous pouvez également ajouter d'autresif
états dans le modèle si vous ne souhaitez afficher ces boutons supplémentaires dans certains cas.