簡體   English   中英

如何通過 Django 中的表單向 integer 字段添加值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM