图像未保存在数据库Django中

2024-05-20 17:10:30 发布

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

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

图像的输入

<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')
    ...

url.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)

设置.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,
                    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')

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

  • 更改为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/', admin.site.urls),
    path('', include('colos.urls')),
    path('accounts/', include('allauth.urls')),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
  • models.py
# User profile
class UserProfile (models.Model):
    # user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    user_img = models.ImageField(null=True, blank=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>

Tags: namedivformbranchimgdataresponserequest
1条回答
网友
1楼 · 发布于 2024-05-20 17:10:30

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

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

在您的模型中:

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"

相关问题 更多 >