gpt4 book ai didi

Django 使用 UpdateView 上传文件

转载 作者:行者123 更新时间:2023-12-02 20:47:23 24 4
gpt4 key购买 nike

我尝试了通用 View 的简约 django 实现来上传个人资料图片。

View .py

class UpdateProfile(UpdateView):
form_class = UpdateUserProfileForm
model = UserProfile
success_url = reverse_lazy('show_profile')

模型.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)

表单.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/ ) 不包含通用 View ,所以我想知道这是否可能。

更新:感谢 Alasdair 的回答,我更新了我的模板,因此它现在可以作为具有通用 View 的图片上传的简约原型(prototype)正常工作。

要显示图片,文档( https://docs.djangoproject.com/en/1.10/howto/static-files/ )的说明再次非常有帮助。

此外,还需要进行媒体设置才能将文件上传到媒体文件夹。

设置.py

MEDIA_URL = '/media/'
MEDIA_ROOT = 'absolute-path-to/media'

url.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 %}

最佳答案

问题出在您的模板中。您尚未设置 enctype,因此 request.FILES 将始终为空。应该是:

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

关于Django 使用 UpdateView 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com