djangoコメント自体を使用して、django用にカスタマイズされたコメントアプリを作成しています。私はhttps://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/に従って手紙を書きましたが、2つの問題があります。1つは、カスタムコメントインスタンスがcontent_objectを提供しないことです。
したがって、次のことを試してみると何も得られません
c = CommentWithFile.object.get(id)=1
c.content_object
そして2つ目は、私のコメントは、カスタマイズされたコメントの形式で追加したファイルのアップロードを行っていません。
私がやりたいもう一つのことは、誰かが特定のトピックにコメントするたびに特定のユーザーのリストをメールで通知することですが、コメントが投稿されたトピックの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
私のcommentwithfileの管理ファイル
from apps.comments.models import CommentWithFile
class CommentWithFileAdmin(admin.ModelAdmin):
pass
admin.site.register(CommentWithFile, CommentWithFileAdmin)
私はdjango1.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>