在/media/<MultiValueDict:{}>

2024-09-27 21:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

Django:我正在尝试从用户表单上传图像,并将其保存到我的数据库中。但是我得到了一个错误

OSError at /media/ [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'E:\pritish\myweb\myweb\media\'

以下是我的代码:

我的表格(HTML)

<form action="/python/contact/" method="POST">{% csrf_token %}

            <h3 class="my-4" style="font-family: 'Acme';">Contact Me :</h3>
            <div class="form-group my-4">
                <label for="exampleFormControlInput1">Name</label>
                <input type="text" class="form-control" id="exampleFormControlInput1" name='name' placeholder="Enter your name" required>
            </div>

            <div class="form-group my-4">
              <label for="exampleFormControlInput1">Email address</label>
              <input type="email" class="form-control" id="exampleFormControlInput1" name='email' placeholder="Enter your email" required>
            </div>

            <div class="form-group my-4">
                <label for="exampleFormControlInput1">Phone Number</label>
                <input type="tel" class="form-control" id="exampleFormControlInput1" name='phone' placeholder="Phone Number">
            </div>

            <div class="form-group-sm">
              <label for="exampleFormControlTextarea1">Enter your query</label>
              <textarea class="form-control" id="exampleFormControlTextarea1" name='desc' rows="3" required></textarea>
            </div>

            <div class="form-group">
                <label for="exampleFormControlFile1">Example file input</label>
                <input type="file" class="form-control-file" id="exampleFormControlFile1" name="file">
              </div>

            <button type="submit" class="btn btn-primary my-4">Submit</button>

          </form>

最后,我正在进行图像输入

models.py

class Contact(models.Model):
    msg_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, default="")
    email = models.CharField(max_length=100, default="")
    phone = models.CharField(max_length=30, default="")
    desc = models.CharField(max_length=10000, default="")
    image = models.ImageField(upload_to="python/images", default="")

    def __str__(self):
        return self.name

views.py

def contact(request):
    messages.warning(request, "Hello Aliens")
    if request.method == 'POST':
        name = request.POST.get('name', '')
        email = request.POST.get('email', '')
        phone = request.POST.get('phone', '')
        desc = request.POST.get('desc', '')        
        contact = Contact(name=name, email=email, phone=phone, desc=desc, image=request.FILES)
        contact.save()

    return render(request, 'python/contact.htm')

Tags: namedivformidmodelsemailrequestmy
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:31

图像不能是request.FILES,它是request.FILES['file'],因为这是<input type="file">项的name="…"属性的值

因此,您可以使用以下内容构造Contact

Contact.objects.create(
    name=name, email=email, phone=phone, desc=desc, image=request.FILES['file']
)

然而,我建议使用^{} [Django-doc],这可以消除您在这里编写的大量样板代码

<form>中,如果传递文件,还需要指定编码类型:

<form enctype="multipart/form-data" action="/python/contact/" method="POST">
    …
</form>

相关问题 更多 >

    热门问题