2010-04-07 10 views
0

Je voudrais ajouter un préfixe à chaque formulaire de commentaire django. J'utilise plusieurs formes de commentaires dans la même page et depsite ça marche bien, je n'aime pas avoir beaucoup de champs de saisie avec le même attribut id comme <input type="text" name="honeypot" id="id_honeypot" />.Ajouter un préfixe do Django formulaire de commentaires

Alors, est-il possible de dire à django d'ajouter un préfixe à chaque instance de formulaire? Je sais que je peux le faire avec d'autres formes quand je crée une instance de formulaire de cette façon newform = CustomForm(prefix="a") mais en utilisant le système de commentaires de Django, cette partie est gérée par un tag de modèle de commentaire {% get_comment_form for [object] as [varname] %}. Puis-je demander à la balise de gabarit d'ajouter un préfixe?

Répondre

2

Eh bien, j'ai une idée. Ajoutez votre custom comments form et remplacez __init__. Vous pouvez générer préfixe de target_object et le mettre à self.prefix:

def __init__(self, target_object, data=None, initial=None): 
    ... 

Ou mieux, substituez BaseForm.add_prefix:

def add_prefix(self, field_name): 
    """ 
    Returns the field name with a prefix appended, if this Form has a 
    prefix set. 

    Subclasses may wish to override. 
    """ 
    return self.prefix and ('%s-%s' % (self.prefix, field_name)) or field_name 

Mise à jour: Oui, vous avez raison. Le préfixe ne fonctionnerait pas, la raison principale est le code dans contrib.comments.views.comments.post_comment. Donc, je l'ai relu votre question et si vous avez besoin de changer "id" utiliser BaseForm.auto_id:

class CustomCommentForm(CommentForm): 
    def __init__(self, target_object, data=None, initial=None): 
     super(CustomCommentForm, self).__init__(target_object, data, initial) 
     idprefix = target_object.__class__.__name__.lower() 
     self.auto_id = idprefix + "_%s" 
+0

J'ai essayé d'utiliser add_prefix de cette façon et oui il rend bien la forme: <> mais maintenant il me soulève une erreur: Il semble qu'il ne sait pas comment utiliser le préfixe pour extraire les champs. Une idée? Merci pour votre réponse! –

+0

Voir le texte de mise à jour. –

Questions connexes