Как загрузить файл изображения в объект File Django, а затем сохранить в FileField моей модели - PullRequest
0 голосов
/ 26 апреля 2018

Итак, я потратил более 24 часов, пытаясь выяснить, как сохранить изображение в моей модели.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    avatar = models.FileField(null=True, upload_to='www-avatar/')

Мой Profile Model имеет атрибут avatar, который обозначает изображение профиля..

Что я хочу сделать, это после того, как User завершит процесс регистрации, модели Profile будет назначено изображение по умолчанию из моей статической папки.

Здесьмой Settings.py для статического

STATIC_ROOT = '/srv/foo/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "bar/resource/"), )

И изображение, которое я хочу загрузить и сохранить в модели, находится в bar/resource/profile_light.png

Пока что решение, которое я нашелэто с этим

file = File()
url = static("bar/resource/profile_light.png")
file = urllib.request.urlopen(url).read()
r = File(file)
authbox.profile.avatar = File(file)
authbox.profile.save()

безрезультатно.Я новичок в Django, и я был бы очень признателен за любую форму помощи.

РЕДАКТИРОВАТЬ: Возможно, я плохо сформулировал свой вопрос, но мне нужно добавить изображение по умолчанию в создаваемые профили.Фрагмент сохранения аватара, который я дал выше, находится после процесса регистрации.Поэтому я хочу получать доступ к изображению каждый раз, когда кто-то подписывается, и изображение сохраняется как аватар по умолчанию.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

В вашей модели:

avatar = models.ImageField(upload_to='www-avatar', default='path/to/my/default/image.jpg')
0 голосов
/ 26 апреля 2018

Сначала измените тип поля в вашем models.py как:

avatar = models.ImageField(upload_to='www-avatar/', null=True)

во-вторых, в вашем файле настроек вы должны определить медиа-каталог

MEDIA_DIR = os.path.join(BASE_DIR, "www-avatar")

тогда вы должны изменить ваш urls.py файл как

urlpatterns = [
    url(r'^admin/', admin.site.urls),
.......

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Не в последнюю очередь не забудьте установить библиотеку подушек pip install Pillow (https://pypi.org/project/Pillow/2.2.1/)

...