Pergunta

Então, eu estou usando django.contrib.comments. Eu instalei-o OK, mas em vez do formulário de comentário padrão pesado, eu gostaria de usar um modelo de formulário personalizado que só mostra uma textarea e botão enviar.

A lógica por trás disso é que o usuário só vê a forma, se a área já autenticado, e eu gostaria a manter a forma simples e pegar o seu nome de usuário etc automaticamente.

Eu tenho implementado um formulário personalizado, mas estou recebendo um erro ao tentar apresentá-lo.

Aqui está o que eu tenho no meu modelo para a página com o formulário de comentário (entrada é o objeto passado do ponto de vista):

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

E aqui está o meu HTML no /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 %}

Ela torna tudo bem inicialmente, mas quando eu tento enviar o formulário de comentário, eu recebo o seguinte erro Django:

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

alguém pode ajudar?

Foi útil?

Solução 2

Corrigido o problema copiando a partir app Theju - em particular, ver comentário Josué Works' on part 2

.

Outras dicas

O modelo de comentário utiliza uma chave estrangeira genérico para mapear o objeto para o qual o comentário foi feito como uma entrada de blog. Estes são necessários campos ocultos incluídos no formulário de comentário padrão.

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)
...

Se você não alterou a classe de formulário e só quer mudar o modelo de html, então você pode incluir esses campos adicionando um loop sobre todos os campos ocultos.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top