Вопрос

Итак, я использую django.contrib.comments.Я установил его нормально, но вместо громоздкой формы комментариев по умолчанию я хотел бы использовать собственный шаблон формы, который просто отображает текстовое поле и кнопку отправки.

Обоснование этого заключается в том, что пользователь видит форму только в том случае, если он уже прошел аутентификацию, и я бы хотел, чтобы форма была простой и автоматически подбирала его имя пользователя и т. д.

Я внедрил пользовательскую форму, но при попытке отправить ее получаю сообщение об ошибке.

Вот что у меня есть в шаблоне страницы с формой комментариев (запись — это объект, переданный из представления):

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

А вот мой HTML в /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 %}

Первоначально все отображается нормально, но когда я пытаюсь отправить форму комментария, я получаю следующую ошибку Django:

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

Кто-нибудь может помочь?

Это было полезно?

Решение 2

Исправлена ​​проблема путем копирования из Приложение Теджу - в частности, см. комментарий Джошуа Уоркса к части 2.

Другие советы

Модель комментариев использует общий внешний ключ для сопоставления с объектом, для которого был сделан комментарий, например записью в блоге.Это обязательные скрытые поля, включенные в стандартную форму комментариев.

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

Если вы не изменили класс формы и хотите изменить только шаблон HTML, вы можете включить эти поля, добавив цикл for ко всем скрытым полям.

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top