2009-12-07 9 views
0

Donc, j'utilise django.contrib.comments. Je l'ai installé OK mais plutôt que le formulaire de commentaire par défaut maniable, j'aimerais utiliser un modèle de formulaire personnalisé qui montre juste un textarea et un bouton de soumission.Personnalisation des commentaires django

La logique derrière ceci est que l'utilisateur ne voit que le formulaire si elles sont déjà authentifiées, et je voudrais garder le formulaire simple et ramasser leur nom d'utilisateur, etc automatiquement.

J'ai implémenté un formulaire personnalisé, mais j'obtiens une erreur lorsque j'essaie de le soumettre.

Voici ce que j'ai dans mon modèle pour la page avec le formulaire de commentaires (entrée est l'objet passé de la vue):

{% load comments %} 
{% render_comment_form for entry %} 

Et voici mon code HTML dans /templates/comments/form.html:

{% if user.is_authenticated %} 
    <p>Submit a comment:</p> 
    <form action="/comments/post/" method="post"> 
    <textarea name="comment" id="id_comment" rows="2" style="width: 90%;"></textarea> 
      <input type="hidden" name="options" value="{{ options }}" /> 
      <input type="hidden" name="target" value="{{ target }}" /> 
      <input type="hidden" name="gonzo" value="{{ hash }}" /> 
      <input type="hidden" name="next" value="{{ entry.get_absolute_url }}" /> 
      <span style="float:right;"><input type="submit" name="post" value="Add"></span> 
    </form> 
    {% else %} 
     <p>Please <a href="/login/">log in</a> to post a comment.</p> 
    {% endif %} 

Il rend bien au départ, mais lorsque je tente de soumettre le formulaire de commentaire, je reçois l'erreur Django suivant:

Comment post not allowed (400) 
Why: Missing content_type or object_pk field. 

Quelqu'un peut-il aider?

Répondre

1

résolu le problème en copiant Theju's app - en particulier, voir le commentaire de Joshua Works sur une partie 2.

1

Le modèle de commentaire utilise une clé étrangère générique pour mapper à l'objet pour lequel le commentaire a été effectué, tel qu'une entrée de blog. Ce sont des champs cachés obligatoires inclus dans le formulaire de commentaire standard.

De django.contrib.comments.models

... 
class CommentSecurityForm(forms.Form): 
    """ 
    Handles the security aspects (anti-spoofing) for comment forms. 
    """ 
    content_type = forms.CharField(widget=forms.HiddenInput) 
    object_pk  = forms.CharField(widget=forms.HiddenInput) 
... 

Si vous n'avez pas changé la classe de formulaire et que vous souhaitez seulement changer le modèle html vous pouvez inclure ces champs en ajoutant une boucle sur toute la champs cachés.

{% for hidden in form.hidden_fields %} 
    {{ hidden }} 
{% endfor %} 
Questions connexes