【问题标题】:Update Form Not Submitting更新表格未提交
【发布时间】:2019-07-23 12:48:24
【问题描述】:

我正在尝试使用 fbv 更新模型的字段,并且我也为这些字段创建了不同的表单。但是,无论如何我都无法提交表格。我认为问题出在图像字段上,并且表单无法呈现为有效。有解决办法吗?

models.py

  class UserProfile(models.Model):
      user = models.OneToOneField(User,on_delete=models.CASCADE, default=None, null=True)
      role = models.CharField(max_length=50, choices=Roles)
      verified =models.BooleanField(default = False,blank=True)
      photo = models.ImageField(upload_to='images', blank=True, default='default/testimonial2.jpg')
      slug = models.SlugField(unique=False, blank=True)

      def save(self, *args, **kwargs):
         self.slug = slugify(self.user.username)
         super(UserProfile, self).save(*args, **kwargs)

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

       def get_absolute_url(self):
            if (self.verified==True):
               return reverse("NewApp:mail", kwargs={'pk': self.pk})
            else:
                return reverse("NewApp:userlist")

views.py

  def UserUpdateView(request,slug):
     object = User.objects.get(username=request.user)
     user_form = UserUpdateForm(instance=object)
     obj = UserProfile.objects.get(slug=request.user)
      profile_form = UserProfileForm(instance=obj)

      if user_form.is_valid() and profile_form.is_valid():
          user_form.save()
          profile_form.save()
          return redirect('NewApp:logindex')

       return render(request, 'NewApp/userprofile_form.html',
              {'user_form': user_form,
               'profile_form': profile_form,})

forms.py

 class UserUpdateForm(forms.ModelForm):
    class Meta():
        model = User
        fields = ('first_name','last_name','email')


class UserProfileForm(forms.ModelForm):
    class Meta():
        model = UserProfile
        fields = ('photo',)

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    在 POST 请求的情况下,您不要使用 request.POSTrequest.FILES 构造表单。你应该像这样实现:

    def UserUpdateView(request,slug):
        user = request.user
        profile = UserProfile.objects.get(user=user)
        if request.method == 'POST':
            user_form = UserUpdateForm(request.POST, request.FILES, instance=user)
            profile_form = UserProfileForm(request.POST, request.FILES, instance=profile)
            if user_form.is_valid() and profile_form.is_valid():
                user_form.save()
                profile_form.save()
                return redirect('NewApp:logindex')
        else:
            user_form = UserUpdateForm(instance=user)
            profile_form = UserProfileForm(instance=profile) 
        return render(
            request,
            'NewApp/userprofile_form.html',
            {'user_form': user_form, 'profile_form': profile_form,}
        )

    【讨论】:

    • 嘿,谢谢。但是现在我收到一个错误“'照片'属性没有与之关联的文件。”因为它,我什至无法加载主页。
    • @Srvastav4:这看起来更像是您在渲染模板时做错了什么,例如:stackoverflow.com/q/15322391/67579
    • 但是图像没有更新。此外,电子邮件也将被删除。
    • @Srvastav4: 你在你的<form> 中设置了enctype="multipart/form-data"
    • @Srvastav4:此外,这取决于您的UserUpdateFormUserProfileForm 的外观。
    猜你喜欢
    • 2017-05-21
    • 1970-01-01
    • 2019-03-06
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多