Pregunta

Por lo tanto, estoy usando django.contrib.comments. Lo he instalado bien, pero en lugar de la forma de comentario por defecto difícil de manejar, me gustaría utilizar una plantilla de formulario personalizado que solo muestra un área de texto y el botón de enviar.

La razón detrás de esto es que el usuario sólo ve la forma si zona ya autenticados, y me gustaría mantener la forma simple y recoger su nombre de usuario, etc automáticamente.

He implementado un formulario personalizado, pero estoy recibiendo un error cuando trato de enviarlo.

Esto es lo que tengo en la plantilla para la página con el formulario de comentarios (entrada es el objeto pasado desde el punto de vista):

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

Y aquí está mi HTML en /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 %}

Se hace bien al principio, pero cuando trato de enviar el formulario de comentarios, me sale el siguiente error de Django:

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

¿Alguien puede ayudar?

¿Fue útil?

Solución 2

Se ha solucionado el problema copiando desde aplicación de Theju - en particular, véase el comentario Joshua Works' en la parte 2

.

Otros consejos

El modelo comentario utiliza una clave externa genérica para asignar al objeto para el cual se hizo el comentario como una entrada de blog. Estos son necesarios campos ocultos incluidos en el formulario de comentarios estándar.

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 no ha cambiado la clase de formulario y sólo desea cambiar la plantilla HTML, entonces puede incluir estos campos mediante la adición de un bucle sobre todos los campos ocultos.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top