2010-10-06 7 views
3

J'espère que cela n'a pas été demandé et je l'ai raté, mais j'ai cherché un groupe et je n'ai rien trouvé.Ajout d'un bouton supplémentaire à un objet dans admin django

J'ajoute un bouton de sauvegarde supplémentaire à l'administrateur django lors de l'ajout ou de la modification d'un objet. Faire cela est assez facile. Je viens de remplacer le submit_line.html pour ajouter le bouton supplémentaire, puis remplacer la fonction save_model pour vérifier le nom de ce bouton. Cela fonctionne très bien.

Mon problème est que j'ai seulement besoin de ce bouton pour apparaître pour un objet particulier ... pas tous. J'ai regardé dans change_form.html pour voir comment il sait de quel objet il s'agit et trouvé {{opts.module_name}}, mais il ne semble pas être accessible dans submit_line.html. J'ai essayé de l'imprimer et rien ne s'est montré. J'ai également pensé à pirater save_as (pas très gracieux, mais je ne me soucie pas vraiment de ce projet particulier), mais ce bouton apparaît seulement sur le changement .. pas sur ajouter, donc cela ne fonctionnera pas.

Est-ce que quelqu'un sait comment détecter l'objet avec lequel je travaille dans submit_line.html? Ou tout autre moyen de le faire?

Merci!

Répondre

4

Vous pouvez le faire en utilisant javascript comme ceci:

/static/js/useful.js

 
$(document).ready(function ($) { 
    $('input[name="_addanother"]').before('<input type="submit" name="_use" value="Useful functionality"/>'); 
}); 

et dans votre ModelAdmin ajouter:

 
class MyModelAdmin(admin.ModelAdmin): 
    class Media: 
     js = ('/static/js/useful.js',) 
+2

bien, mais pour les personnes qui utilisent cela, en raison de https://code.djangoproject.com/ticket/12882, cela ne fonctionnera pas, donc je pense qu'une solution de contournement rapide serait de remplacer $ avec django.jQuery – Paulo

+3

Merci pour l'info Paulo. Je l'ai implémenté comme ceci: '(function ($) { $ (document) .ready (function ($) { $ ('input [name =" _ addanother "]'). Before (' '); }); }) (django.jQuery);' – Pikaling

0

Vous devriez pouvoir accéder à l'objet d'origine dans le contexte de change_view en passant par original. Par exemple {{ original.id }} devrait imprimer son id!

+0

Ai-je besoin de faire quoi que ce soit pour que ça marche? J'ai mis {{original.id}} avant les boutons de soumission et rien ne s'affiche. (J'ajoute juste un peu de texte pour m'assurer que les changements apparaissaient.) – lovefaithswing

+0

Désolé de voir que la ligne de soumission est affichée à l'aide d'un tag de modèle, donc vous ne pouvez pas y accéder. Vous ne pouvez pas créer votre propre étiquette de modèle pour transmettre les paramètres que vous désirez au modèle, voir http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/templatetags/admin_modify.py#L22 pour l'original! –