【问题标题】:Updating Field in Django does not work在 Django 中更新字段不起作用
【发布时间】:2016-08-08 18:48:57
【问题描述】:

我的views.py中有以下内容

if request.method=='POST':
    form = ExtraForm(request.POST,instance=request.user)
    print ("hi")
    if form.is_valid():
        form.save()
        print ("yes")
    print ("newform is ")
else:
    form = ExtraForm(instance=request.user)
    context['form']=form
return render(request, "updateProfile.html",context)

现在发生的事情是我没有收到任何错误,并且一切正常,但最终不会更新任何内容!这对我来说没有意义。知道发生了什么吗?

ExtraForm:

class ExtraForm(forms.ModelForm):
    research_place = forms.CharField(max_length=256, label="", required=True, widget=forms.TextInput(attrs={'class': 'form-control','placeholder': 'First Name','required':True}))
    studies = forms.CharField(max_length=256, label="", required=True, widget=forms.TextInput(attrs={'class': 'form-control','placeholder': 'Last Name','required':True}))

    class Meta:
        model = RegisterUser
        fields = ['research_place','studies']
        widgets = {
            # 'image': ImageCropWidget,
        }

型号:

class RegisterUser(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)

    biography = models.CharField(max_length=1000000,blank=True)
    research_place = models.CharField(max_length=1000000,blank=True)
    studies = models.CharField(max_length=1000000,blank=True)

    image = models.ImageField(blank=True,null=True,upload_to='uploaded_images',default ="uploaded_images/defaultReal.jpg")
    # cropping = ImageRatioField('image','200x200',size_warning=True) #width x height

    avatar_thumbnail = ImageSpecField(source='image',
                                    processors=[ResizeToFill(200, 200)],
                                    format='JPEG',
                                    options={'quality': 60})

    activation_key = models.CharField(max_length=50)
    key_expires = models.DateTimeField()
    class Meta:
        permissions = (
            ("has_uploaded", ("Has uploaded")),
            ("is_authenticated", ("Is authenticated")),
        )

【问题讨论】:

  • 表单有效时返回什么?在这种情况下,context 的值是多少?
  • @ozgur 我在上下文中没有任何内容,但是当我检查数据库时,更改还没有完成

标签: python django forms field


【解决方案1】:

看起来该表单根本无效。添加else 子句并检查errors

if request.method == "POST":
    form = ExtraForm(request.POST, instance=request.user)
    if form.is_valid():
        form.save()
        # You should perform some redirection here btw.
        return redirect("/success/")
    else:
        print "Errors:", form.errors
        context["form"] = form
else:
    form = ExtraForm(instance=request.user)
    context["form"] = form
return render(request, "updateProfile.html", context)

更新后:

您将错误的用户传递给表单。 request.userUser 类型,而您尝试更新 RegisteredUser。您应该更新该行:

form = ExtraForm(request.POST, instance=request.user)

form = ExtraForm(request.POST, instance=RegisteredUser.objects.get(user=request.user))

同样适用于else 部分:

form = ExtraForm(instance=RegisteredUser.objects.get(user=request.user))

【讨论】:

  • 不,没有错误,它工作得很好。它在 form.save() 之后打印(“成功”)
  • 1.您是否覆盖了表单的save 方法? 2.你有没有用commit=False打电话保存? 3. 上面的代码你试过了吗? 4. 你也可以给我们看ExtraForm 上课吗? 5. 这是视图函数中的全部代码还是其中的一部分?
猜你喜欢
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 2014-11-01
相关资源
最近更新 更多