django自定义评论的图像字段不工作
问题描述:
我正在做django-contrib评论的自定义评论应用程序到我的Django应用程序。终于,我获得了具有图像字段的评论应用程序,并且它显示在当然的模板中。但这是事情,当我试图发表评论与图片,它不保存图像文件,并说空(该字段是必填项)。任何人都可以帮我弄清楚。这里是一些代码片段。django自定义评论的图像字段不工作
models.py
class CommentWithPic(Comment):
image = models.ImageField(upload_to="comments/%Y/%m/%d/", null=True, blank=True)
forms.py
class CommentFormWithPic(CommentForm):
image = forms.ImageField()
def get_comment_model(self):
return CommentWithPic
def get_comment_create_data(self):
data = super(CommentFormWithPic, self).get_comment_create_data()
data['image'] = self.cleaned_data['image']
return data
post_with_comment.html
{% render_comment_list for adi %}
{% get_comment_form for adi as form %}
<form action="{% comment_form_target %}" method="post">
{% csrf_token %}
{% for field in form %}
{% if field.is_hidden %}
{{ field }}
{% else %}
{% if field.errors %}{{ field.errors }}{% endif %}
{{ field.label }}
{{ field }}
{% endif %}
{% endfor %}
<input type="hidden" value="{% url 'ad' adi.id %}"/>
<input type="submit" value="comment"/>
</form>
答
您需要声明的形式如下内容(注意enctype
属性)时处理ImageField
<form enctype="multipart/form-data" action="{% comment_form_target %}" method="post">\
与具有的FileField和ImageField的字段形式处理是一个小比正常形式更加复杂。 首先,为了上传文件,你需要确保你的元素正确定义ENCTYPE为“多/表单数据”
您还需要使图像可选形式:
class CommentFormWithPic(CommentForm):
image = forms.ImageField(required=False)
...
'CommentForm'是一个'ModelForm'?你有没有尝试过'image = forms.ImageField(required = False)'? – 2014-11-03 17:57:26
@ TimmyO'Mahony,是的,我试过required = False,如果是这样,但它没有图像文件。而且,它是CommentForm。正如它在django文档中所说 – Zorig 2014-11-03 18:03:00
那么你想要做什么?你说如果你不包含'required = False',那么它会发布评论页面并且抱怨图片字段是必需的(这是正确的功能),但是如果你包含'required = False',那么它会发表评论没有图像(这也是正确的功能) – 2014-11-03 18:20:44