【问题标题】:Django trouble using image formDjango 使用图像表单时遇到问题
【发布时间】:2019-03-20 12:22:51
【问题描述】:

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

我在代码中传递的基于文本的信息似乎有效,但我无法让用户从个人资料页面上传个人资料图片。但是如果我去 django-admin 页面,我可以从那里上传并显示个人资料图片。所以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 添加到 urls.py 文件中。任何帮助将不胜感激:)

【问题讨论】:

  • 阅读this。您将学习如何将文件传递到您的表单以及如何保存您的表单。

标签: python django


【解决方案1】:

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

form = ProfileUpdateForm(request.POST)

改为:

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

并保存您的表单,而不是将数据分配给user 对象。当您执行user.save() 时,您并没有保存user.profile

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

【讨论】:

  • 但同样糟糕的是,OP 没有使用 form.save()。
  • 感谢您的帮助! :D
【解决方案2】:

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

if 'image' in request.FILES:

            user.profile.image = request.FILES['image']

【讨论】:

  • 哇!非常感谢!!修复了它:DDD
猜你喜欢
  • 2020-11-14
  • 2016-12-30
  • 2018-12-10
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多