【问题标题】:How to get an image form field to update only if a new file has been chosen in django?仅当在 django 中选择了新文件时,如何获取要更新的图像表单字段?
【发布时间】:2015-05-26 05:25:10
【问题描述】:

我有一个带有图像字段的自定义个人资料表单,用户可以在其中上传个人资料图片以及其他一些字段。到目前为止它工作正常。问题是,提交表单时,它总是上传和更新字段,即使用户没有选择文件。所以一个用户已经提交了表单并上传了一张图片。然后他/她稍后会回来更新一些其他字段,但不更新图片。提交表单后,个人资料图片消失并已重置为默认值。仅在选择新文件时如何获取图像字段更新?

modesl.py

class Profil(models.Model):
    def content_file_userpic(instance, filename):
        return '/'.join(['pics', instance.user.username, filename])

    user = models.OneToOneField(User, primary_key=True)
    user_pic = models.ImageField(upload_to=content_file_userpic, blank=True, verbose_name='Foto', default='user_pic_default.png')

forms.py

class ProfilForm(ModelForm):
    user_pic = forms.ImageField(label='Foto',required=False, widget=forms.FileInput)

【问题讨论】:

  • 请出示您的查看代码。
  • def profile_edit(request): try: form = ProfilForm(instance=Profil.objects.get(pk=request.user)) context = {"profil_formular": form} template = "profil/edit .html" 除了 ObjectDoesNotExist: print("该条目不存在。") return redirect("profil_add") if request.method == "POST": form = ProfilForm(request.POST, request.FILES) if form. is_valid():profil = form.save(commit=False) profile.user = request.user profil.bewerbungsnr = request.user.id profile.save() info(request, ("profile updated")) return redirect(' /profil') 返回渲染(请求、模板、上下文)

标签: django forms file-upload


【解决方案1】:

您忘记在表单构造函数中添加 instance 参数:

profile = Profil.objects.get(user=request.user)
form = ProfilForm(request.POST, request.FILES, instance=profile)

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 2013-07-22
    • 2021-11-04
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多