首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django在使用图像表单时遇到麻烦

Django在使用图像表单时遇到麻烦
EN

Stack Overflow用户
提问于 2019-03-20 20:22:52
回答 2查看 68关注 0票数 0

我一直在尝试创建一个项目的个人资料页面,在那里用户可以上传个人资料照片和一些基本的个人信息使用Django作为框架。

我在我的代码中传递的基于文本的信息似乎可以工作,但我无法让用户从个人资料页面上传个人资料图片。但是如果我转到django-admin页面,我可以上传并显示那里的个人资料图片。因此,对于models.py文件,问题似乎出在forms.py文件中...我在网上搜索了一段时间,搜索了各种乌龟,但似乎什么也没找到。请帮助:)

models.py文件

代码语言:javascript
复制
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
email_confirmed = models.BooleanField(default=False)
image= models.ImageField(upload_to='profile_image', blank=True)

def __str__(self):
    return self.user.username

forms.py文件

代码语言:javascript
复制
class ProfileUpdateForm(forms.ModelForm):
YEARS= [x for x in range(1900,2021)]
birth_date = forms.DateField( initial="21-06-1995", widget=forms.SelectDateWidget(years=YEARS))
image = models.ImageField(upload_to='profile_image',blank=True)
class Meta:
    model = Profile
    fields = ('bio','birth_date','location','image')

views.py文件

代码语言:javascript
复制
@login_required
def profile_edit(request):
form = ProfileUpdateForm(request.POST)

if request.method == 'POST':

    if form.is_valid():
        user = request.user
        user.profile.bio = form.cleaned_data.get("bio")
        user.profile.birth_date = form.cleaned_data.get("birth_date")
        user.profile.location = form.cleaned_data.get("location")
        user.save()
        return redirect('profile')
    else:
        form = ProfileUpdateForm()

context = {
    'form' : form

}
return render(request, 'webside/profile_edit.html', context)

已经在设置中实现了静态根/ url和媒体根/url,并且我已经将静态url添加到urls.py文件中。任何帮助都将不胜感激:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-20 20:28:46

您只是将数据传递给表单,而不是文件:

代码语言:javascript
复制
form = ProfileUpdateForm(request.POST)

更改为:

代码语言:javascript
复制
form = ProfileUpdateForm(data=request.POST, files=request.FILES)

并保存表单,而不是将数据分配给user对象。在执行user.save()操作时,您不会保存user.profile

代码语言:javascript
复制
profile = form.save(commit=False)
profile.user = request.user
profile.save()
票数 0
EN

Stack Overflow用户

发布于 2019-03-20 20:30:25

从表单对象发布后,您未在视图中保存图像。如果表单有效,您可以这样保存它

代码语言:javascript
复制
if 'image' in request.FILES:

            user.profile.image = request.FILES['image']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55260700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档