Skip to main content
 首页 » 编程设计

python之图像字段未保存,引发错误 'This field is required'

2024年08月25日32jpfss

模型.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) 

表单.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 文档,但它的 Material 非常简洁。

请您参考如下方法:

您需要添加 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>