我正在尝试为以下内容编写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/