Как расширить рамки комментариев (django), удалив ненужные поля?

Я читал в django docs о структуре комментариев и о том, как ее настроить (http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/) На этой странице показано, как добавить новые поля в форму. Но я хочу сделать, чтобы удалить ненужные поля, такие как URL, email (среди других второстепенных модов.)

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

Ответы

Ответ 1

Недавно я реализовал решение, о котором упомянул Офри, поскольку я только хотел принять одиночное поле комментария для комментария (например, SO does, no "name", no "email" и "url" ).

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

Мой "/templates/comments/form.html":

{% load comments i18n %}
{% if user.is_authenticated %}
    <form action="{% comment_form_target %}" method="post">
        {% csrf_token %}
        {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %}
        {% for field in form %}
            {% if field.is_hidden %}
                {{ field }}
            {% else %}
                {% if field.name != "name" and field.name != "email" and field.name != "url" %}
                    {% if field.errors %}{{ field.errors }}{% endif %}
                    <p {% if field.errors %} class="error"{% endif %} {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
                    {{ field }}
                    </p>
                {% endif %}
            {% endif %}
        {% endfor %}
        <input type="submit" name="post" class="submit-post" value="{% trans "Add Comment" %}" />
    </form>
{% else %}
    I'm sorry, but you must be <a href="javascript:alert('send to login page')">logged in</a> to submit comments.
{% endif %}

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

Мой "/templates/comments/list.html":

<div class="comment_start"></div>
{% for comment in comment_list %}
    <div class="comment">
       {{ comment.comment }} 
       (from <a href="javascript:alert('show user profile/stats')">{{ comment.user }}</a> - {{ comment.submit_date|timesince }} ago)
    </div>
{% endfor %}

На странице мне нужна форма, я сначала вызываю {% load comments %}, а затем {% render_comment_form for [object] %}, чтобы показать форму, или {% render_comment_list for [object] %}, чтобы сгенерировать список комментариев к объекту (замените [object] на соответствующий имя объекта).

Это отлично работает для меня и все еще дает мне все другие "бесплатные" вещи, которые поставляются с комментариями django (модерация, флага, фиды, полиморфные ассоциации и т.д.)

Ответ 2

Подробное резюме о том, как сделать это элегантно, с помощью подкласса подкласса подклассы, а не скрывать элементы в форме/других неопрятных хаках, можно найти Django Comments: Want для удаления URL-адреса пользователя, а не расширения модели. Как?

По сути, вы подклассифицируете CommentForm и меняете его метод get_comment_create_data (self), а затем выталкиваете атрибуты, которые вам не нужны (например, электронная почта, URL-адрес и т.д.).

J