2009-12-07 4 views
0

Итак, я использую django.contrib.comments. Я установил его в порядке, но вместо неудобной формы комментариев по умолчанию, я бы хотел использовать шаблон пользовательской формы, который просто показывает кнопку textarea и submit.Настройка django-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 %} 

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

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

Может ли кто-нибудь помочь?

ответ

1

Исправлена ​​проблема при копировании из Theju's app - в частности, см комментарий Иешуа Works' на части 2.

1

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

От 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 hidden in form.hidden_fields %} 
    {{ hidden }} 
{% endfor %} 
Смежные вопросы