AttributeError:“字节”对象没有属性“ _committed”

时间:2019-10-06 12:14:36

标签: python django

我有一个带有cd /apache-vcs/git/repos git init --bare main.git 的表单,尝试保存上传的图像时出现错误。该图像通过POST XMLHttpRequest上传。我不知道为什么会这样。

views.py:

<input type="file">

models.py:

import datetime

from django.shortcuts import render

from .models import TemporaryImage

def upload_file(request):
    key = f'{request.user}-{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    for file in request.FILES.get('file'):
        img = TemporaryImage(image=file, key=key)
        img.save()

def home_view(request):
    return render(request, 'products/home.html', {})

urls.py:

from django.db import models

def get_temp_image_path(instance, filename):
    return os.path.join('tmp', str(instance.id), filename)

class TemporaryImage(models.Model):
    image = models.ImageField(upload_to=get_temp_image_path, blank=True, null=True)
    key = models.CharField(max_length=100)

模板“ home.html”:

from django.contrib import admin
from django.urls import path

from products.views import upload_file, home_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home_view, name='home'),
    path('upload/', upload_file, name='upload_file')
]

完整堆栈跟踪:

<!DOCTYPE html>
<html>
<head>
    <title>SO Question</title>
    <script>     
        function uploadFile() {
            var fd = new FormData();
            fd.append("file", document.getElementById('file').files[0]);

            var value = [];
            document.getElementsByName('csrfmiddlewaretoken').forEach(function(x) {
                value.push(x.value);
            })

            fd.append('csrfmiddlewaretoken', value[0]);

            var xhr = new XMLHttpRequest();
            xhr.open("POST", '/upload/');
            xhr.send(fd);
      }
    </script>
</head>
<body>
    <form enctype="multipart/form-data" method="POST">
        {% csrf_token %}
        <label for="file">Select a File to Upload</label>
        <input type="file" id="file" name="file">
        <input type="button" onclick="uploadFile()" value="Upload">
  </form>
</body>
</html>

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

您仅上传单个文件;您不应该遍历文件密钥。

def upload_file(request):
    key = f'{request.user}-{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    file = request.FILES.get('file')
    if file:
        img = TemporaryImage(image=file, key=key)
        img.save()

答案 1 :(得分:1)

我想您也尝试过这样保存图像:

from django.core.files.base import ContentFile
...
def upload_file(request):
    key = f'{request.user}-{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    file = request.FILES.get('file')
    if file :
        img = TemporaryImage.objects.create(key=key)
        img.image.save(key, ContentFile(file), save=True)