2017-10-20 179 views
1

我遇到了麻煩圖像從Django的「InMemoryUploadedFile」對象有沒有屬性「得到」

我得到的錯誤上傳到S3桶:

「InMemoryUploadedFile」對象有沒有屬性「得到」

我看過類似的問題,但還沒有找到從他們的溶液(或其他未列出):

ModelForm has no attribute get

Django image uploading

這裏是我的代碼:

forms.py

from django import forms 
from .models import UploadImage, UploadAudio 

class ImageForm(forms.ModelForm): 
class Meta: 
    model = UploadImage 
    fields = ['myimage'] 

views.py

from django.contrib import messages 
from django.shortcuts import render, get_object_or_404, redirect 
from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import redirect 
from .forms import ImageForm, AudioForm 
from .models import UploadImage 


def ImageCreate(request): 
    if request.method == 'POST': 
     form = ImageForm(request.POST, request.FILES['myimage']) 
     if form.is_valid(): 
      image = form.save(commit=False) 
      image.author = request.user 
      image.save() 
      messages.success(request, "Uploaded successfully") 
      return redirect('mytimer') 
     else: 
      messages.error(request, "Unable to upload at this time") 
else: 
    form = ImageForm() 
return render(request, "myimages.html", {'form': form}) 

models.py

from __future__ import unicode_literals 

from django.db import models 
from django.conf import settings 


class UploadImage(models.Model): 
    """ 
    Define how the user will upload images 
    """ 
    # link author to registered user 
    author = models.ForeignKey(settings.AUTH_USER_MODEL) 
    myimage = models.ImageField(upload_to='myimages/') 
    uploaded_at = models.DateTimeField(auto_now_add=True) 

非常感謝你提前爲任何幫助。

回溯

Environment: 


Request Method: POST 
Request URL: http://127.0.0.1:8000/myimages/ 

Django Version: 1.11.6 
Python Version: 2.7.12 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'hello', 
'timer', 
'accounts', 
'django_forms_bootstrap', 
'diary', 
'storages', 
'useruploads', 
'debug_toolbar'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'debug_toolbar.middleware.DebugToolbarMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/core/handlers/exception.py" in inner 
41.    response = get_response(request) 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/core/handlers/base.py" in _get_response 
187.     response = 
self.process_exception_by_middleware(e, 
request) 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/core/handlers/base.py" in _get_response 
185.     response = wrapped_callback(request, 
*callback_args, **callback_kwargs) 

File "/home/pauly/Documents/MeditationTimer/Meditate_prj/ 
useruploads/views.py" in ImageCreate 
15.   if form.is_valid(): 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/forms/forms.py" in is_valid 
183.   return self.is_bound and not self.errors 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/forms/forms.py" in errors 
175.    self.full_clean() 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/forms/forms.py" in full_clean 
384.   self._clean_fields() 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/forms/forms.py" in _clean_fields 
396.     value = 
field.widget.value_from_datadict(self.data, self.files, 
self.add_prefix(name)) 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/forms/widgets.py" in value_from_datadict 
423.   upload = super(ClearableFileInput, 
self).value_from_datadict(data, files, name) 

File 
"/home/pauly/Documents/MeditationTimer/env/local/lib/python2.7/site- 
packages/django/forms/widgets.py" in value_from_datadict 
367.   return files.get(name) 

Exception Type: AttributeError at /myimages/ 
Exception Value: 'InMemoryUploadedFile' object has no attribute 'get' 
+1

你有完整的追溯?回顧回溯往往會讓你更快地朝正確的方向發展。 – Iguananaut

+0

這裏似乎沒有任何關於上傳到S3的代碼。 –

+0

我不認爲這個問題真的發生在任何與S3直接相關的地方,但是這也是我們需要看到* full * traceback的原因。 – Iguananaut

回答

1

你不應該從請求到形式傳遞一個特定的文件,你應該通過整個FILES詞典就像你通過整個POST。

form = ImageForm(request.POST, request.FILES) 
+0

非常感謝!這工作完美。 –

相關問題