[英]How to add a value to an integer field via a form in Django?
我目前正在嘗試制作一個表格,將值添加到我創建的“點”model,但似乎沒有通過 go。 我制作了一個表格,允許用戶輸入任何 integer 值,並且它應該添加(或減去)model。 誰能指出我該怎么做的正確方向? 任何幫助表示贊賞。
這是我的 forms.py:
class addpointForm(forms.ModelForm):
add_point_field = forms.IntegerField(widget=forms.NumberInput)
class Meta:
model = Points
fields = ['user']
Model.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
視圖.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
; 將您的表格 class 更改為從forms.Form
繼承。 這樣做是因為您的表單實際上並未修改 model; 它只接受來自用戶的輸入,然后您接受並使用它來修改 model。 在這種情況下,在我看來,它使用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})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.