2009-07-08 5 views
0

J'ai créé un formulaire personnalisé et l'ai intégré dans mon interface d'administration.Incorporer un modèle personnalisé dans l'interface d'administration django et la session

Fondamentalement j'ai pris la change_form.html et à gauche sous l'url interface admin:

(r'^admin/compilation/evaluation/add/$', EvaluationWizard([EvaluationForm1, EvaluationForm2])), 

Il fonctionne, mais la "session" admin n'est pas conservé. Je peux accéder à la page sans être connecté à l'interface d'administration, et les variables d'administration comme le fil d'Ariane ne fonctionnent pas. Comment puis-je l'incorporer sous la «session d'interface d'administration» pour ainsi dire?

Merci, John

Répondre

1

Si vous devez assurer que les utilisateurs autorisés uniquement accéder à la page, vous devez vérifier pour un utilisateur admin dans votre gestionnaire de requêtes. Ce sera la méthode __call__ dans votre classe EvaluationWizard.

Fondamentalement, la logique utilisée par l'administrateur est disponible pour afficher here. Recherchez ce dans la classe AdminSite:

if not self.has_permission(request): 
    return self.login(request) 

et utiliser la même logique, ou tout ce que vous avez besoin. Vous aurez besoin d'une instruction similaire en haut de votre méthode __call__. La méthode has_permission de AdminSite est une ligne, que vous pouvez utiliser telle quelle, mais vous devrez adapter la méthode login à vos besoins spécifiques.

+0

Merci pour votre commentaire. Je ne suis pas sûr comment utiliser votre exemple, ni sûr si cela aidera les variables de modèle telles que le fil d'Ariane pour fonctionner? Pourriez-vous faire un exemple pratique de l'utilisation de la méthode __call__ dans une classe FormWizard? Si je viens de surcharger la méthode __call__ dans le FormWizard et que je ne fais rien mais retourne sa super-classe, j'obtiens une erreur indiquant qu'il ne retient pas un objet HttpResponse. –

+0

Voulez-vous vraiment dire retourner la superclasse? Ou retourner ce que la superclasse retourne? Vous devez poster le code pour éviter les malentendus. –

+0

Je veux dire faire def __call __ (self, requête, * args, ** kwargs): super (EvaluationWizard, self) .__ appel __ (requête, * args, * kwargs) Est-ce que c'était ainsi que je devais le faire? –

Questions connexes