2016-10-05 8 views
1

Я попытался выполнить минималистскую реализацию стандартных представлений 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 %} 

ответ

2

Проблема в шаблоне. Вы не установили enctype, поэтому request.FILES всегда будет пустым. Это должно быть:

<form action="" enctype="multipart/form-data" method="post">{% csrf_token %} 
+0

Great.Thank. Сейчас все работает отлично. – user1491229

Смежные вопросы