【问题标题】:Image field didn't get saved, raises error 'This field is required'图像字段未保存,引发错误“此字段为必填项”
【发布时间】:2015-07-31 12:16:04
【问题描述】:

models.py:

from django.db import models
from django.contrib.auth.models import User


class Electronics(models.Model):
    ELEC_CHOICES = (
        ('LAP', 'Laptops'),
        ('MOB', 'Mobiles'),
        ('WAT', 'Watches'),
        ('CAM', 'Camera'),
    )
    elec_name = models.CharField(max_length=3, choices=ELEC_CHOICES)
    elec_image = models.ImageField('Label', upload_to='C:/Users/User/Desktop/')
    elec_price = models.IntegerField('Price')
    elec_stock  = models.BooleanField(default=False)

forms.py:

from django import forms
from django.forms import ModelForm
from .models import Electronics


class ElectronicsForm(ModelForm):
    class Meta:
        model = Electronics
        fields = '__all__'

views.py:

from django.shortcuts import render
from django.http import HttpResponseRedirect
from .models import Electronics
from .forms import ElectronicsForm

# Create your views here.

def eleclist(request):
    elec = Electronics.objects.order_by('elec_name')
    return render(request, 'index.html', {'elec': elec})

def elecadd(request):
    if request.method == 'POST':
        form = ElectronicsForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('shopp:eleclist'))
        else:
        print(form.errors)
    else:
        form = ElectronicsForm()

    return render(request, 'add.html', {'form': form})

我的 add.html:

<html>
<head><title>Electronics</title></head>
<body>
    <form method = "post">
        {% csrf_token %}
        {{form.as_p}}
        <input type="submit" name="submit" value="create">
    </form>
</body>     
</html>

我是第一次尝试使用 django 模型表单上传图片。但是当我点击提交时,图像没有被保存。它会引发错误'this field is required'

我也查看了一些 django 文档,但它的材料非常简洁。

【问题讨论】:

    标签: python django-models django-forms django-views


    【解决方案1】:

    您需要将enctype="multipart/form-data" 添加到您的form 标签中,否则您的文件将不会上传到服务器。因此,请将您的表单模板更新为:

    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" name="submit" value="create">
    </form>
    

    【讨论】:

      猜你喜欢
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多