gpt4 book ai didi

python - 自定义 django 注释

转载 作者:行者123 更新时间:2023-12-01 06:02:55 25 4
gpt4 key购买 nike

我正在使用 django 评论本身为 django 构建一个自定义评论应用程序。我已关注 https://docs.djangoproject.com/en/dev/ref/contrib/comments/custom/严格来说,我有两个问题,一个是我的自定义评论实例没有提供 content_object。

因此,当我尝试以下操作时,我什么也没得到

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

第二,我的评论不会上传我以自定义评论的形式添加的文件。

我想做的另一件事是通过邮件通知,每次有人对特定主题发表评论时都会列出特定用户,但我想在通知中添加评论的网址或主题标题发布于,我该怎么做?

我的自定义评论模型。

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. 标签具有允许文件上传的 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 代码,提示:请确保检查 request.FILES 那里顺便说一句

让我做出一个也许更具体的答案。

关于python - 自定义 django 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com