猿问

我想使用 django 中的默认表单将图像上传到数据库,但图像未上传。它显示“未选择文件”

forms.py


from django import forms

from .models import Posts



class PostForm(forms.ModelForm):

    class Meta:

        model = Posts

        fields = ['topic','post','thumbnail','author']

models.py


class Posts(models.Model):

topic = models.ForeignKey(Topic,on_delete=models.CASCADE)

post = models.TextField()

date = models.DateTimeField(auto_now_add=True)

author = models.ForeignKey(Author,on_delete=models.CASCADE)

thumbnail = models.ImageField()


def __str__(self):

    return f"{self.post[:20]}..."


class Meta:

    verbose_name_plural = 'posts'

views.py


def add_post(request):

if request.method == 'POST':

    form = PostForm(data=request.POST)

    if form.is_valid():

        form.save()

        return redirect("/")

else:

    form=PostForm()

context = {'form':form}

return render(request,'blog/add_post.html',context)

add_post.html


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<body>

    <form action="{% url 'blog:add_post' %}" method='post'>

    {% csrf_token %}

    {{form.as_p}}


    <input type='submit'>

    </form>

</body>

</html>

当我尝试提交表单时,即使我选择了文件,缩略图字段也会自动显示“未选择文件”。所以请帮我解决这个问题!!!


MMMHUHU
浏览 102回答 2
2回答

莫回无

您必须添加upload_to:&nbsp; &nbsp; item_image = models.ImageField(&nbsp; &nbsp; &nbsp; &nbsp; blank = True,&nbsp; &nbsp; &nbsp; &nbsp; null = True,&nbsp; &nbsp; &nbsp; &nbsp; upload_to = 'item/image/',&nbsp; &nbsp; &nbsp; &nbsp; db_column = 'ITEM_IMAGE',&nbsp; &nbsp; &nbsp; &nbsp; verbose_name = 'IMAGE',&nbsp; &nbsp; )请记住为媒体文件分配路径:(在 settings.py 上)MEDIA_URL = '/media/'&nbsp;MEDIA_ROOT = os.path.join(BASE_DIR, 'media')&nbsp;在 forms.py 中:&nbsp; &nbsp; item_image = forms.ImageField(&nbsp; &nbsp; &nbsp; &nbsp; required = False,&nbsp; &nbsp; &nbsp; &nbsp; label = 'Image',&nbsp; &nbsp; &nbsp; &nbsp; widget = forms.ClearableFileInput(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attrs = {'class': 'form-control mb-2', 'placeholder':&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 'IMAGE',}&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; )这是我的 github 和一个 django 项目来指导你:Github/Django

绝地无双

您需要添加enctype="multipart/form-data"到您的 html 表单:&nbsp;<form action="{% url 'blog:add_post' %}" method='post' enctype="multipart/form-data">&nbsp; &nbsp; {% csrf_token %}&nbsp; &nbsp; {{form.as_p}}&nbsp; &nbsp; <input type='submit'></form>并传递request.FILES给您的表格:def add_post(request):&nbsp; if request.method == 'POST':&nbsp; &nbsp; &nbsp; form = PostForm(request.POST, request.FILES)&nbsp; &nbsp; &nbsp; if form.is_valid():&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; form.save()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return redirect("/")&nbsp; else:&nbsp; &nbsp; &nbsp; form=PostForm()&nbsp; context = {'form':form}&nbsp; return render(request,'blog/add_post.html',context)
随时随地看视频慕课网APP

相关分类

Python
我要回答