我正在尝试为博客创建帖子的编辑。
当我使用实例创建表单时,所有字段都会显示,但是图像部分会显示为“未选择文件”
这是我的模特
class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
image = models.ImageField(blank=True, null=True)
publication_date = models.DateField(default=datetime.date.today)
expiring_date = models.DateField()
这是我的表格
class PostForm(forms.models.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.instance.publication_date = datetime.date.today()
class Meta:
model = Post
exclude = ['publication_date']
widgets = {
'title': forms.fields.TextInput(attrs={
'class': 'form-control'
}),
'content': forms.Textarea(attrs={
'class': 'form-control'
}),
'image': forms.fields.FileInput(attrs={
'class': 'form-control'
}),
'expiring_date': forms.fields.DateInput(attrs={
'input_type': 'date',
'class': 'form-control'
}),
}
这是我的观点
def edit(request, post_id):
post = get_object_or_404(Post, pk=post_id)
form = PostForm(instance=post)
return render(request, 'posts/edit.html', {'form': form})
这是我的模板
{% block content %}
<div class="row">
<div class="col-md-12">
<div class="card animated materialU animation-delay-5">
<div class="card-block card-block-big">
<form action="{% url 'posts:update' %}" method="post" enctype='multipart/form-data'>
{{ form }}
<input type="submit" name="save changes" value="Save Changes" class="btn btn-success">
{% csrf_token %}
</form>
</div>
</div>
</div>
</div>
{% endblock %}
缺少什么?
编辑;也许由于安全原因是不可能的?:How to set a value to a file input in HTML?
答案 0 :(得分:0)
在基于类的视图或基于函数的视图中定义POST方法时,将使用request.POST
检索表单。
如果您的表单中有图片之类的文件,则必须在您的视图中提及以下内容:
form = self.form(request.POST,request.FILES) # class based view.