Python Django表单未保存图像文件

Python Django表单未保存图像文件,python,django,django-forms,django-views,django-2.1,Python,Django,Django Forms,Django Views,Django 2.1,在这个webapp中,我有一个问题模型和一个问题图模型。每当用户上传图像时,都应将其保存在media/question_图像文件夹中。 如果我从管理面板上传图片,效果很好,但是当我从网页上传图片时,它不会被保存。事实上,post请求正在工作,我没有收到任何错误。图像未保存在所需位置。 这是我所有的密码: model.py forms.py class QuestionDiagramForm(forms.ModelForm): question_diagram = forms.CharField(

在这个webapp中,我有一个问题模型和一个问题图模型。每当用户上传图像时,都应将其保存在media/question_图像文件夹中。 如果我从管理面板上传图片,效果很好,但是当我从网页上传图片时,它不会被保存。事实上,post请求正在工作,我没有收到任何错误。图像未保存在所需位置。 这是我所有的密码: model.py

forms.py

class QuestionDiagramForm(forms.ModelForm):
question_diagram = forms.CharField(widget = forms.FileInput(attrs={'class':'questionDiagram-questionDiagram'}))
question_diagram_text = forms.CharField(widget = forms.Textarea(attrs={'class':'questionDiagram-questionDiagramText', 'placeholder':'Describe', 'maxlength':'48'}))

class Meta:
    model = QuestionDiagram
    fields = ['question_diagram', 'question_diagram_text']
设置.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在project URL.py中(添加了mediaroot和mediaurl)

views.py

class QuestionDiagramView(View):
form_class = QuestionDiagramForm
template_name = 'mechinpy/question_diagram.html'

def get(self, request, slug):
    form = self.form_class(None)
    return render(request, self.template_name, {'form':form})

def post(self, request, slug):
    question = get_object_or_404(Question, slug=slug)
    form = self.form_class(request.POST, request.FILES)

    if form.is_valid():
        questiondiagram = form.save(commit=False)
        questiondiagram.user = self.request.user
        questiondiagram.question = question
        questiondiagram.save()
        return redirect('mechinpy:detail', question.slug)

    else:
        return render(request, self.template_name, {'form':form})
html


{%csrf_令牌%}
{{form.non_field_errors}}
{%形式的字段为%}
{{fields.errors}
{{fields}}
{%endfor%}
提交

url.py

path('m/question/<slug:slug>/diagram/add/', views.QuestionDiagramView.as_view(), name='question_diagram'),
path('m/question//diagram/add/',views.QuestionDiagramView.as_view(),name='question_diagram'),
此处:

class QuestionDiagramForm(forms.ModelForm):
    question_diagram = forms.CharField(...)

您需要的是
ImageField
,而不是
CharField
。FWIW,您应该只保留默认字段,。

这是一个简单的错误,我花了很多时间。谢谢你的回答。
<form class="form-block" method="POST" action="" enctype="multipart/form-data">
{% csrf_token %}

<!-- Question Diagram Error -->     
<span class="show-error">{{form.non_field_errors}}</span>

{% for fields in form %}
<span class="show-error"> {{fields.errors}} </span>

<!-- Question Diagram Fields -->
<div class="show-field"> {{fields}} </div>
{% endfor %}

<!-- Question Diagram Submit Button -->
<div class="submit-content">
    <button class="submit-button" type="submit"> Submit </button>
</div>
path('m/question/<slug:slug>/diagram/add/', views.QuestionDiagramView.as_view(), name='question_diagram'),
class QuestionDiagramForm(forms.ModelForm):
    question_diagram = forms.CharField(...)