Я попытался выполнить минималистскую реализацию стандартных представлений Django для загрузки фотографий профиля.Загрузка файла Django с UpdateView
views.py
class UpdateProfile(UpdateView):
form_class = UpdateUserProfileForm
model = UserProfile
success_url = reverse_lazy('show_profile')
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
website = models.URLField(blank=True)
picture = models.ImageField(upload_to='user/img/%Y-%m-%d/', blank=True)
forms.py
class UpdateUserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['website','picture']
userprofile_form.html
<form action="" enctype="multipart/form-data" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="{% trans "Save" %}"/>
</form>
Все работает отлично. Теперь сообщение об ошибке. Поле сайта будет правильно обновлено, а кнопка поиска позволяет выбрать файл для загрузки. Однако файл никогда не появляется в системе, и поле базы данных остается пустым.
К сожалению, документация django по загрузке файла (https://docs.djangoproject.com/en/1.10/topics/http/file-uploads/) не включает общие представления, поэтому я задаюсь вопросом, возможно ли это вообще.
Обновление: Благодаря ответу Аласдайра я обновил свой шаблон, чтобы он отлично работал в качестве минималистического прототипа для загрузки изображения с помощью общих представлений.
Для отображения изображения, инструкции по документации (https://docs.djangoproject.com/en/1.10/howto/static-files/) являются весьма полезными снова.
Также необходимо настроить параметры мультимедиа для загрузки файлов в папку мультимедиа.
settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = 'absolute-path-to/media'
urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
шаблон
{% if userprofile.picture.url|length > 0 %}
<img src="{{ userprofile.picture.url }}" width="200px">
{% else %}
<img src="{% static "/img/default_profile.jpg" %}" width="200px" />
{% endif %}
Great.Thank. Сейчас все работает отлично. – user1491229