gpt4 book ai didi

python - 如何通过Django中的表单向整数字段添加值?

转载 作者:行者123 更新时间:2023-12-03 17:11:59 27 4
gpt4 key购买 nike

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

这是我的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

View .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})

最佳答案

将您的代码更改为:

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)

然后,让我们澄清和简化 View :
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})

关于python - 如何通过Django中的表单向整数字段添加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61842788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com