图像未保存在数据库 django

如何解决图像未保存在数据库 django

我正在尝试将图像上传数据库。在发布数据时,我没有收到任何错误

图片输入

<div class="text-center">
  <h6>Upload a different photo...</h6>
      <input type="file" class="form-control" name="user_img">
</div>

图片的模型

class UserProfile (models.Model):
    user_img = models.ImageField(null=True,blank=True,upload_to='static/images')
    ...

urls.py

from django.contrib import admin
from django.urls import path,include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/',admin.site.urls),path('',include('colos.urls')),path('accounts/',include('allauth.urls')),] + static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT)

settings.py

MEDIA_URL = '/images/'
MEDIA_ROOT = os.path.join(BASE_DIR,'static/images')

views.py

def edit_profile(request):
    try:
        # checking if the user exist in UserProfile through the logged in email id
        user_data = UserProfile.objects.get(emailID = request.user.email)
        if request.POST.get('action') == 'post' and request.FILES:
            name = UserProfile.objects.all()
            response_data = {}
            # user profile image start
            user_img = request.FILES['user_img']
            # user profile image end
            name = request.user.username
            emailID = request.user.email
            phone = request.POST.get('phone')
            college_name = request.POST.get('college_name')
            branch = request.POST.get('branch')

            response_data['user_img'] = user_img
            response_data['name'] = name
            response_data['emailID'] = emailID
            response_data['phone'] = phone
            response_data['college_name'] = college_name
            response_data['branch'] = branch
            # updating the current logged in user values
            user_data = UserProfile.objects.get(emailID = request.user.email)
            if(user_data.emailID == request.user.email):
                UserProfile.objects.filter(emailID = request.user.email).update(
                    user_img = user_img,name = name,emailID = emailID,phone = phone,college_name = college_name,branch = branch
                )
            return render(request,'edit_profile.html')
    except UserProfile.DoesNotExist:
        name = UserProfile.objects.all()
        response_data = {}
        # creating new user
        if request.POST.get('action') == 'post' and request.FILES:
            # user profile image start
            user_img = request.FILES['user_img']
            # user profile image end
            name = request.user.username
            emailID = request.user.email
            phone = request.POST.get('phone')
            college_name = request.POST.get('college_name')
            branch = request.POST.get('branch')

            response_data['user_img'] = user_img
            response_data['name'] = name
            response_data['emailID'] = emailID
            response_data['phone'] = phone
            response_data['college_name'] = college_name
            response_data['branch'] = branch
            try:
                # checking if the user exist
                user_data = UserProfile.objects.get(emailID = request.user.email)
            except UserProfile.DoesNotExist:
                # if the user doesn't exist create the user
                UserProfile.objects.create(
                    user_img = user_img,'edit_profile.html')
    else:
        # if the profile is already created fetch the values
        context = {
            'user_img' : user_data.user_img.url,'name' : user_data.name,'emailID' : user_data.emailID,'phone' : user_data.phone,'college_name' : user_data.college_name,'branch' : user_data.branch
            }
        return render(request,'edit_profile.html',{'context' : context})
    return render(request,'edit_profile.html')

我可以获取通过 UserProfile 上传django admin 图像。问题是提交图像时它没有反映在数据库中。

  • 将其更改为media

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT =  os.path.join(BASE_DIR,'media') 
  • urls.py
from django.contrib import admin
from django.urls import path,include
# For user profile
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/',document_root = settings.MEDIA_ROOT)
  • models.py
# User profile
class UserProfile (models.Model):
    # user = models.OnetoOneField(User,null=True,on_delete=models.CASCADE)
    user_img = models.ImageField(null=True,upload_to='images/')
    name = models.CharField(max_length=100)
    emailID = models.CharField(max_length=100)
    phone = models.CharField(max_length=15)
    college_name = models.CharField(max_length=200)
    branch = models.CharField(max_length=100)
  • 我在 html 中的表单添加enctype
<form class="form-horizontal" role="form" method="POST" id="post-form" enctype="multipart/form-data">
  • 表单代码edit_profile.html
<form class="form-horizontal" role="form" method="POST" id="post-form" enctype="multipart/form-data">
                      {% csrf_token %}
                      <div class="form-group">
                        <div class="col-md-3">
                          <div class="text-center">
                            <h6>Upload a different photo...</h6>
                            <input type="file" class="form-control" name="user_img">
                          </div>
                        </div>
                        <label class="col-lg-3 control-label">Full name:</label>
                        <div class="col-sm-9 text-secondary">
                            {{user.username}}
                          </div>
                      </div>
                      <div class="form-group">
                        <label class="col-lg-3 control-label">Email:</label>
                        <div class="col-sm-9 text-secondary">
                            {{user.email}}
                          </div>
                      </div>
                      <div class="form-group">
                        <label class="col-lg-3 control-label">Phone:</label>
                        <div class="col-lg-8">
                          <input class="form-control" type="text" name="phone" value={{context.phone}}>
                        </div>
                      </div>
                      <div class="form-group">
                        <label class="col-md-3 control-label">College Name:</label>
                        <div class="col-md-8">
                          <input class="form-control" type="text" name="college_name" value={{context.college_name}}>
                        </div>
                      </div>
                      <div class="form-group">
                        <label class="col-md-3 control-label">Branch:</label>
                        <div class="col-md-8">
                          <input class="form-control" type="text" name="branch" value={{context.branch}}>
                        </div>
                      </div>
                      <button type="submit" class="btn btn-primary">Submit</button>
                    </form>
                    <script>
                      $(document).on('submit','#post-form',function(e){
                          console.log("Phone="+$('input[name="phone"]').val());
                          console.log("College Name="+$('input[name="college_name"]').val());
                          console.log("Branch="+$('input[name="branch"]').val());
                          e.preventDefault();
                          // getting the value entered
                          phone = $('input[name="phone"]').val();
                          college_name = $('input[name="college_name"]').val();
                          branch = $('input[name="branch"]').val();
                          user_img = $('input[name="user_img"]').val();
                          console.log(phone);
                          console.log(college_name);
                          console.log(branch);
                          var name = "123" ;
                          var emailID = "abc@gmail.com";
                          $.ajax({
                              type:'POST',url:'{% url "edit_profile" %}',data:{
                                  user_img : user_img,name: name,emailID: emailID,phone: phone,college_name : college_name,branch : branch,csrfmiddlewaretoken: '{{ csrf_token }}',// csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),action: 'post'
                              },error : function(xhr,errmsg,err) {
                              $('#results').html("<div class='alert-Box alert radius' data-alert>Oops! We have encountered an error: "+errmsg+
                                  " <a href='#' class='close'>&times;</a></div>"); // add the error to the dom
                              console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
                          }
                          });
                      });
                  </script>

解决方法

QuerySet.update() 方法不会在模型上调用 save(),因此不会执行将图像放入存储的常用机制。

如果您在模型实例上设置属性然后调用 update(),而不是使用 save(),图像应该保存到磁盘上的正确位置。

在您的模型中:

class UserProfile (models.Model):
    user_img = models.ImageField(null=True,blank=True)

在你看来:

def edit_profile(request):
    try:
        # checking if the user exist in UserProfile through the logged in email id
        user_data = UserProfile.objects.get(emailID = request.user.email)
        if request.method == "POST" and request.FILES:
            name = UserProfile.objects.all()
            response_data = {}
            # user profile image start
            user_img = request.FILES['user_img']
            # user profile image end
            name = request.user.username
            emailID = request.user.email
            phone = request.POST.get('phone')
            college_name = request.POST.get('college_name')
            branch = request.POST.get('branch')

            response_data['user_img'] = user_img
            response_data['name'] = name
            response_data['emailID'] = emailID
            response_data['phone'] = phone
            response_data['college_name'] = college_name
            response_data['branch'] = branch
            # updating the current logged in user values
            user_data = UserProfile.objects.get(emailID = request.user.email)
            if(user_data.emailID == request.user.email):
                user=UserProfile.objects.get(emailID = request.user.email)
                user.user_img = user_img,user.name = name,user.emailID = emailID,user.phone = phone,user.college_name = college_name,user.branch = branch
                user.save()
                
            return render(request,'edit_profile.html')
    except UserProfile.DoesNotExist:
        name = UserProfile.objects.all()
        response_data = {}
        # creating new user
        if request.POST.get('action') == 'post' and request.FILES:
            # user profile image start
            user_img = request.FILES['user_img']
            # user profile image end
            name = request.user.username
            emailID = request.user.email
            phone = request.POST.get('phone')
            college_name = request.POST.get('college_name')
            branch = request.POST.get('branch')

            response_data['user_img'] = user_img
            response_data['name'] = name
            response_data['emailID'] = emailID
            response_data['phone'] = phone
            response_data['college_name'] = college_name
            response_data['branch'] = branch
            try:
                # checking if the user exist
                user_data = UserProfile.objects.get(emailID = request.user.email)
            except UserProfile.DoesNotExist:
                # if the user doesn't exist create the user
                UserProfile.objects.create(
                    user_img = user_img,name = name,emailID = emailID,phone = phone,college_name = college_name,branch = branch
                )
            return render(request,'edit_profile.html')
    else:
        # if the profile is already created fetch the values
        context = {
            'user_img' : user_data.user_img.url,'name' : user_data.name,'emailID' : user_data.emailID,'phone' : user_data.phone,'college_name' : user_data.college_name,'branch' : user_data.branch
            }
        return render(request,'edit_profile.html',{'context' : context})
    return render(request,'edit_profile.html')

如评论中所述,尝试使用 request.method == "POST"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?