Py学习  »  Django

Django无法使用图像格式

Thomas Lunden Rannestad • 4 年前 • 689 次点击  

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

我在代码中传递的基于文本的信息似乎有效,但我无法让用户从配置文件页面上传配置文件图片。但如果我去django管理页面,我可以上传和显示从那里的个人资料图片。所以对models.py文件来说似乎是有效的,而问题似乎是在forms.py文件中。。。我在网上搜索了一段时间和各种各样的风波,但似乎什么也没用。请帮忙:)

models.py文件

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文件

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文件

@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添加到url.py文件中。任何帮助都将不胜感激:)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52606
 
689 次点击  
文章 [ 2 ]  |  最新文章 4 年前
caner karagüler
Reply   •   1 楼
caner karagüler    5 年前

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

if 'image' in request.FILES:

            user.profile.image = request.FILES['image']
dirkgroten
Reply   •   2 楼
dirkgroten    5 年前

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

form = ProfileUpdateForm(request.POST)

更改为:

form = ProfileUpdateForm(data=request.POST, files=request.FILES)

保存表单,而不是将数据分配给 user 反对。你不是在拯救 user.profile 当你这样做的时候 user.save() :

profile = form.save(commit=False)
profile.user = request.user
profile.save()