Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django图像格式是';不要保存图像_Python_Html_Django_Django Forms - Fatal编程技术网

Python Django图像格式是';不要保存图像

Python Django图像格式是';不要保存图像,python,html,django,django-forms,Python,Html,Django,Django Forms,我有一个表格,其中包括上传个人资料图片。我可以在/admin/界面上传图像并正确显示它们,但我无法让我的模型表单保存图像 以下是我所拥有的: models.py forms.py cand_reg.html(模板) views.py 当我删除有问题的行时,错误就消失了 def add_candidate(request): if request.method == 'POST': form = AddCandidateForm(request.POST, request.

我有一个表格,其中包括上传个人资料图片。我可以在
/admin/
界面上传图像并正确显示它们,但我无法让我的
模型表单
保存图像

以下是我所拥有的:

models.py forms.py cand_reg.html(模板) views.py 当我删除有问题的行时,错误就消失了

def add_candidate(request):
    if request.method == 'POST':
        form = AddCandidateForm(request.POST, request.FILES)
        if form.is_valid():
            candidate = form.save(commit=False)
            # candidate = request.FILES['ProfilePicture']
            candidate.UserID = request.user
            candidate.save()
            return redirect('/home/')
    else:
        form = AddCandidateForm()

    return render(request, 'cand_reg.html', {
        "form": form
    })
但是,这实际上并没有保存图像,因此当我尝试在单独的模板中渲染它时,会出现一个错误

有人能帮我理解为什么图像没有上传吗

提前感谢:)

  • 您必须设置模型的
    ProfilePicture
    属性,而不是实例本身(
    candidate=request.FILES['ProfilePicture']

    改为:

    candidate = form.save(commit=False)
    candidate.ProfilePicture = request.FILES['ProfilePicture']
    candidate.UserID = request.user
    candidate.save()
    
  • 更改HTML表单以接受文件。更改为:
    。当表单包含文件输入(
    )时,其编码方式必须与仅包含文本时使用的编码方式不同。更多如果右键单击并检查
    {{form.ProfilePicture}}
    ,您将看到这实际上是一个文件输入

  • 额外的一个:

  • 请不要在PascalCase中命名您的类属性(
    ProfilePicture
    UserID
    等)。使用snake\u case代替(
    profile\u picture
    user\u id
    等)

  • 我做了你建议的更改,但仍然得到相同的错误。另外,您建议的额外更改是否有特定的原因?在您按照建议更改
    enctype
    后,仍然会出现相同的错误?啊,是的,就是这样。非常感谢你。是什么改变使它起作用的?更新了我的答案以反映您的问题。此外,您应尽量与
    附件中的蛇形字母保持一致。请帮自己一个忙,读一读。它不仅对你有帮助,对其他蟒蛇也有帮助;)
    {% block content %}
        <h1>Register as a candidate</h1>
        <form method="POST" class="post-form">
            {% csrf_token %}
            <h2>Select an election:</h2><br>
            {{form.ElectionID}}<br>
            <h2>Enter your bio:</h2><br>
            {{form.Bio}}<br>
            <h2>Upload a profile picture:</h2><br>
            {{form.ProfilePicture}}<br>
            <button type="submit">Register</button>
        </form>
    {% endblock %}
    
    def add_candidate(request):
        if request.method == 'POST':
            form = AddCandidateForm(request.POST, request.FILES)
            if form.is_valid():
                candidate = form.save(commit=False)
                candidate = request.FILES['ProfilePicture']
                candidate.UserID = request.user
                candidate.save()
                return redirect('/home/')
        else:
            form = AddCandidateForm()
    
        return render(request, 'cand_reg.html', {
            "form": form
        })
    
    def add_candidate(request):
        if request.method == 'POST':
            form = AddCandidateForm(request.POST, request.FILES)
            if form.is_valid():
                candidate = form.save(commit=False)
                # candidate = request.FILES['ProfilePicture']
                candidate.UserID = request.user
                candidate.save()
                return redirect('/home/')
        else:
            form = AddCandidateForm()
    
        return render(request, 'cand_reg.html', {
            "form": form
        })
    
    candidate = form.save(commit=False)
    candidate.ProfilePicture = request.FILES['ProfilePicture']
    candidate.UserID = request.user
    candidate.save()