在编辑时,ModelForm django显示未选择文件

时间:2018-09-22 02:19:54

标签: python django django-forms

我正在尝试为博客创建帖子的编辑。

当我使用实例创建表单时,所有字段都会显示,但是图像部分会显示为“未选择文件”

这是我的模特

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?

1 个答案:

答案 0 :(得分:0)

在基于类的视图或基于函数的视图中定义POST方法时,将使用request.POST检索表单。

如果您的表单中有图片之类的文件,则必须在您的视图中提及以下内容:

form = self.form(request.POST,request.FILES) # class based view.