django 'InMemoryUploadedFile' объект не имеет атрибута 'field' - PullRequest
0 голосов
/ 05 сентября 2011

У меня проблема с загрузкой файлов на рабочий сервер.Я использую django-stdimage для модели следующим образом:

class League(models.Model):
    name = models.CharField(max_length=100)
    logo = StdImageField(upload_to='images/league_logos', blank=True, size=(220, 120))

Используя приложение администратора, я могу загружать шаблоны на свой локальный компьютер (используя сервер разработки) очень хорошо.На производстве у меня есть nginx для статического поиска файлов и apache с mod_wsgi для остальных.При попытке загрузить в производство я получаю объект

'InMemoryUploadedFile' без атрибута 'field'

error.Я выслеживаю журнал ошибок в apache, и, кажется, ничего не происходит, когда я пытаюсь загрузить.Ошибка происходит в

site-packages / django / contrib / admin / templates / admin / includes / fieldset.html, ошибка в строке 19

, которая является просто тегом шаблона, обращающимся к полю.field:

{{ field.field }}

Я не уверен, как отладить это.Есть предложения?

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Возможно, вы захотите передать ему объект хранения файловой системы - тогда он знает, как преобразовать объект InMemoryUploadedFile, полученный из вашего браузера, в ImageFieldFile, чтобы он мог сохранить изображение.

# Near top of your file:
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location=settings.MEDIA_ROOT)

# Then in your model:
    logo = StdImageField(storage = fs, upload_to='images/league_logos', blank=True, size=(220, 120))

Это должно сохранить загруженные файлы в MEDIA_ROOT / images / league_logos.

0 голосов
/ 05 сентября 2011

Я обнаружил, что это связано с тем, что PIL не был установлен, когда я установил pip, мои требования. Это было очень неприятно, так как сообщение об ошибке на самом деле не указывало на это.

К счастью, я наткнулся на эту тему:

Почему я не могу загрузить файлы jpg в свое приложение Django через admin /?

, который дал мне понять.

...