Пользовательские комментарии django - PullRequest
1 голос
/ 20 февраля 2012

Я создаю специальное приложение комментариев для django, используя комментарии django. Я следовал https://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/ к письму, и у меня есть 2 проблемы, одна из которых состоит в том, что мои пользовательские экземпляры комментариев не дают content_object.

Так что, когда я попробую следующее, я ничего не получу

c = CommentWithFile.object.get(id)=1 
c.content_object

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

Еще одна вещь, которую я хотел бы сделать, это уведомлять по почте список определенных пользователей каждый раз, когда кто-то комментирует конкретную тему, но я хотел бы добавить в уведомление URL-адрес или заголовок темы в комментарии. был опубликован, как я мог это сделать?

Моя модель комментария.

def upload_path(instance, filename):
    return '/'.join(['uploads','comment_archives', filename])

class CommentWithFile(Comment):

    comment_file = models.FileField(max_length=255, upload_to=upload_path, 
        blank=True, null=True)
    notify = models.BooleanField(_("Notificar usuarios"))

    @property
    def fileobject(self):
        if self.comment_file:
            return FileObject(self.comment_file.path)
        return None

Моя пользовательская модель формы

class CommentFormWithFile(CommentForm):
    comment_file = forms.FileField(label=_("Archivo"), required=False)
    notify = form.BooleanField(label=_("Notificar usuarios"))

    def get_comment_model(self):
        # Use our custom comment model instead of the built-in one.
        return CommentWithFile

    def get_comment_create_data(self):
        # Use the data of the superclass, and add in the title field
        data = super(CommentFormWithFile, self).get_comment_create_data()
        data['comment_file'] = self.cleaned_data['comment_file']
        data['notify'] = self.cleaned_data['notify']
        return data

А в init .py

from apps.comments.models import CommentWithFile
from apps.comments.forms import CommentFormWithFile

def get_model():
    return CommentWithFile

def get_form():
    return CommentFormWithFile

Файл администратора для моего комментария с файлом

from apps.comments.models import CommentWithFile

class CommentWithFileAdmin(admin.ModelAdmin):
    pass

admin.site.register(CommentWithFile, CommentWithFileAdmin)

Я использую django 1.3.1 и получаю уведомления django для уведомления пользователей о комментариях.

Спасибо всем!

==== ОБНОВЛЕНИЕ ====

Вот шаблон формы комментария

{% load comments i18n %}
<form action="{% comment_form_target %}" method="post">{% csrf_token %}
  {% if next %}<div><input type="hidden" name="next" value="{{ next }}" /></div>{% endif %}
  {% for field in form %}
    {% if field.is_hidden %}
      <div>{{ field }}</div>
    {% else %}
      {% if field.errors %}{{ field.errors }}{% endif %}
      <p
        {% if field.errors %} class="error"{% endif %}
        {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
        {% if field.label == 'Comentario' or field.label == 'Archivo' %}
        {{ field }}
        {% endif %}
      </p>
    {% endif %}
  {% endfor %}

  <div class="actions">
    <input type="hidden" name="next" value="{{ request.path }}" />
    <input type="submit" name="post" class="submit-post" value="{% trans "Post" %}" />
    <input type="submit" name="preview" class="submit-preview" value="{% trans "Preview" %}" />
  </div>
</form>

Вот как я отображаю эту форму в других шаблонах

    {% get_comment_form for archive as form %}
    <h4>Comentar</h4>

    <div class="main_comment" id="comment_form">
        {% render_comment_form for archive %}
    </div>

1 Ответ

2 голосов
/ 20 февраля 2012

2 вещи необходимы для работы вашей системы:

  1. Тег имеет атрибут enctype, позволяющий загружать файлы , например <form enctype="multipart/form-data" method="post" action="">, или браузер будет не отправить файл

  2. Форма создается как с request.POST, так и с request.FILES , например, form = form_class(request.POST, request.FILES).В противном случае FileField не будет иметь никакого значения.

Итак, чего действительно не хватает в вашей теме:

  1. Форма HTML и

  2. Просмотр Python код, подсказка: убедитесь, что вы проверяете запрос. ФАЙЛЫ КСТАТИ

Для меня, возможно, более конкретный ответ.

...