Question

Alors, j'utilise django.contrib.comments. Je l'ai installé sur OK, mais plutôt que la forme peu maniable de commentaire par défaut, je voudrais utiliser un modèle de formulaire personnalisé qui montre juste un textarea et le bouton soumettre.

La raison derrière cela est que l'utilisateur ne voit que la forme si elles zone déjà authentifiées, et je voudrais le garder la forme simple et récupérer leur nom d'utilisateur etc automatiquement.

Je l'ai mis en place un formulaire personnalisé, mais je reçois une erreur lorsque je tente 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?

Était-ce utile?

La solution 2

Correction du problème en copiant app Theju - en particulier, voir le commentaire de Joshua Works sur une partie 2

.

Autres conseils

Le modèle de commentaire utilise une clé étrangère générique pour la carte à l'objet pour lequel le commentaire a été fait comme une entrée de blog. Ceux-ci sont nécessaires champs cachés inclus dans le formulaire standard de commentaire.

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 ne l'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 tous les champs cachés.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top