使用更新模型中值的按钮编写Django以进行用户交互的最佳方式是什么



我正在尝试为以下内容编写Django代码:

用户按下前端的按钮。多个按钮选项可将值递减10、20、30等

当用户按下按钮时,后台Django模型属性的值将相应减少。例如,在下面的代码中,我将初始值设置为107。当用户按下";减去10";按钮,我想从107中减去10,这样值就变成了97。用户未输入任何数据。

我尝试使用Django modelForm和";POST";但这并没有奏效。

欢迎提出任何建议。

下面是我的代码,但没有工作。

型号.py

class Balance(models.Model):
userBalance = models.DecimalField(max_digits=10, decimal_places=2, null=True)

forms.py

class BalanceForm(forms.ModelForm):
class Meta:
model = Balance
fields = ['userBalance']

views.py

def balance(request):
form = BalanceForm(initial={"userBalance":107})
if form.is_valid():
if request.method == "POST" and "form10" in request.POST:
formValue = form.cleaned_data.get('userBalance')
form2 = formValue - 10
return render(request, "econlabs/balance.html", {'form2': form2})
return render(request, "econlabs/balance.html", {'form': form})

为该模型创建一个更新视图,并指定要更新的字段。你可以使用自定义表单,但相信我,这些通用视图会为你节省很多时间。

views.py:

from django.views.generic.edit import UpdateView

class updBalanceUpdateView(UpdateView):
model = Balance
fields = ['userBalance']
template_name_suffix = '_update_form'

在所有属性中,您可以提到需要更新的属性。如上面最后一行(template_name_suffix(所示,对模板使用相同的命名后缀模式。。。[modelname_update_form.html]并显示表单…

Balance_update_form.html:

{% extends "base.html" %}
{% load static %}
{% load bootstrap_tags %}
{% block title %} Update {% endblock %}
{% block body%}
<div class="jumbotron">
Are you sure you want to update ?
</div>
<br>
<form method="POST">
{% csrf_token %}
{{ form|as_bootstrap  }}
<input type="submit" value="Submit" />
</form>
{% endblock %}

确保从模板中获得要更新的相应元素:

<h3><a href="{% url 'app_name:update' pk=val.pk %}">update</a></h3>

单击上面的按钮会触发url。添加URL,

urls.py:

path('update/<int:pk>', views.updBalanceUpdateView.as_view() , name = "update"),

PS:你也可以使用查询来更新视图中的值,选择所需的对象,然后像这样编辑它们,

在views.py中:

example = Balance.objects.filter(id = pk).update(userBalance = userBalance - 10)

查看文档以了解更多信息:https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-editing/

最新更新