【问题标题】:How to add a value to an integer field via a form in Django?如何通过Django中的表单向整数字段添加值?
【发布时间】:2020-05-16 19:56:55
【问题描述】:

我目前正在尝试制作一个表格,为我创建的“点”模型增加价值,但它似乎没有通过。我制作了一个表格,允许用户输入任何整数值,并且它应该添加(或减去)到模型中。谁能指出我该怎么做的正确方向?任何帮助表示赞赏。

这是我的forms.py:

class addpointForm(forms.ModelForm):
    add_point_field = forms.IntegerField(widget=forms.NumberInput)
    class Meta:
        model = Points
        fields = ['user']

模型.py:

class Points(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    points = models.IntegerField(default=0, null=False)

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

views.py:

@login_required
def pointform(request):
    if request.method=='POST':
        form = addpointForm(request.POST)
        if form.is_valid():

            instance = form.save(commit=False)
            messages.success(request, 'Success! Points has been added!')
            instance.user.points += addpointForm.add_point_field
            form.save()
        else:
            messages.error(request, 'Oh no! There was an error when you were adding points!')

    form = addpointForm()
    return render (request,'users/addpoints.html',{'form':form})

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

    将您的代码更改为:

    instance.points += form.add_point_field
    instance.save()
    

    您实际上并没有使用用户的输入;相反,您不小心使用了addpointForm.add_point_field

    在我们做的时候,让我们改变一些其他的事情来澄清你在做什么:

    不要使用ModelForm;将您的表单类更改为从forms.Form 继承。这样做是因为您的表单实际上并没有修改模型;它只接受来自用户的输入,然后您接受并使用它来修改模型。在这种情况下,它使用 Form 在我看来更惯用和直观:

    class addpointForm(forms.Form):
        add_point_field = forms.IntegerField(widget=forms.NumberInput)
    

    那么,让我们澄清和简化视图:

    if request.method=='POST':
        form = addpointForm(request.POST)
        # Get the user from the request.
        user = request.user    
    
        if form.is_valid():
            points_instance = user.points
            points_instance.points += form.add_point_field
            points_instance.save()
    
            messages.success(request, 'Success! Points has been added!')
    
        else:
            messages.error(request, 'Oh no! There was an error when you were adding points!')
    
        form = addpointForm()
    
        return render (request,'users/addpoints.html',{'form':form})
    

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多