【问题标题】:django: image data not able to be save to db from formdjango:图像数据无法从表单保存到数据库
【发布时间】:2021-02-07 13:53:17
【问题描述】:

我已经在尝试修复这个错误几天了。我将 User 扩展为多了一个 Image 字段,但是,图像本身并没有保存到 /media/profile 路径中。如果我从管理面板添加图像,该图像将显示在前面/用户(个人资料图像)中,它也将被创建到所需的路径 /media/profile 中。我假设我的代码在我创建用户并另外添加路径的地方是错误的,因为如果我不添加路径,它将查看图像的根媒体文件夹。

custom_user = Profile.objects.create(user = user, profile_image= 'profiles/'+today_path+'/'+profile_image)

这是我的第一个 Django 项目,它几乎完成了,只是这个错误我无法修复它。对于如何修复它,我将不胜感激。谢谢,谢谢,谢谢!

注册表:

 <form action="{% url 'register' %}" method = 'POST'>
                    {% csrf_token %} 
                    <div class="form-group">
                    <label class = 'fntmk color' for="first_name">Name</label>
                    <input type="text" name="first_name" required>
                  </div>
                  <div class="form-group">
                    <label class = 'fntmk color' for="last_name">Surname</label>
                    <input type="text" name="last_name" required>
                  </div>
                  <div class="form-group">
                    <label class = 'fntmk color' for="username">Username</label>
                    <input type="text" name="username"required>
                  </div>
                  <div class="form-group">
                    <label class = 'fntmk color' for="email">Email</label>
                    <input type="email" name="email"  required>
                  </div>
                  <div class="form-group">
                    <label class = 'fntmk color' for="password">Password</label>
                    <input type="password" name="password"required>
                  </div>
                  <div class="form-group">
                    <label class = 'fntmk color' for="password2">Confirm password</label>
                    <input type="password" name="password2"  required>
                  </div>
                  <div class="form-group">
                    <label class ='fntmk color' for = 'profile_image'>Profile image</label>
                    <strong><input type ='file' name = 'profile_image' id = 'profile_image'></strong>
                  </div>

                  <input type="submit" value="Register" class="btn btn-register btn-block fntmk my2">
              </form>

views>注册def>

def register(request):
    if request.method == "POST":
        # Get form values
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        username = request.POST['username']
        email = request.POST['email']
        password = request.POST['password']
        password2 = request.POST['password2']
        profile_image = request.POST['profile_image']
        print(type(profile_image))
        if len(password) > 6:
            # Check if passwords match
            if password == password2:
                # Check username
                if User.objects.filter(username=username).exists():
                    messages.error(request, 'Username exists')
                    return redirect('register')
                else:
                    if User.objects.filter(email=email).exists():
                        messages.error(request, "Error, email exists")
                        return redirect('register')  
                    else:
                        # if ok
                        user = User.objects.create_user(username=username, password=password, email=email, first_name = first_name, last_name = last_name)
                        todayT = datetime.now()
                        today_path = todayT.strftime("%Y/%m/%d")
                        print(type(today_path))
                        custom_user = Profile.objects.create(user = user, profile_image= 'profiles/'+today_path+'/'+profile_image)
                        print(type(custom_user))
                    # Login after register
                    auth.login(request, user)
                    messages.success(request, "Welcome!" )
                    custom_user.save()
                    return redirect('dashboard')
        else:
            messages.error(request, "Wrong password!" ) 
            return render(request, 'pages/register.html')
    else:
        return render(request, 'pages/register.html')

models.py>扩展用户>

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_image = models.ImageField(upload_to = 'profiles/%Y/%m/%d/', blank = True, null = True)

【问题讨论】:

    标签: django


    【解决方案1】:

    在你的views.py中使用这个

     profile_image = request.Files['profile_image']
    

    在html中

    <form action="{% url 'register' %}" method'POST' enctype="multipart/form-data">
    

    而不是

     profile_image = request.POST['profile_image']
    

    告诉我它是否有效

    【讨论】:

    • AttributeError at /register/ 'WSGIRequest' 对象没有属性 'Files' 它不起作用:S
    • 只需稍作改动,它就可以工作!!!我希望我能给你小费。这是一个巨大的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多