django - 无法在 Django 中使用 RadioSelect 按钮来获取输出
问题描述
我正在尝试创建一个站点,该站点以 RadiSelect 按钮的形式接收用户输入,并且基于该按钮,必须在数据库上运行查询并显示结果。
这是html:
{% block content %}
<div class="container">
<h1>Welcome to your page, @{{ user.username }}</h1>
<h3>Select vendor to check your balance!</h3>
<br>
<form method="POST" class="form">
{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="submit" class="btn btn-primary">Check Balance</button>
{% endbuttons %}
</form>
{% if args.model %}
<h4>You need to pay Rs {{ args.model }} to vendor {{ args.choice }}
</h4>
{% endif %}
</div>
{% endblock %}
urls.py:
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'profiles'
urlpatterns = [
path('adminKaLogin/', views.adminKaPage, name="adminHome"),
path('userLogin/', views.userKaLog, name="userHome"),
]
表格.py
from django import forms
from django.contrib.auth import get_user_model
vendor_choices = [
('1','Vendor 1'),('2',"Vendor 2"), ("3", "Vendor 3"),
]
class select_vendor_form(forms.Form):
Vendor_choices = forms.ChoiceField(choices=vendor_choices,
widget=forms.RadioSelect)
视图.py
def userKaLog(request):
form = select_vendor_form()
if request.method=="POST" and form.is_valid():
choice = form.cleaned_data['Vendor_choices']
print(choice)
records = userData.objects.get(Vendor_number = ('choice')).aggregate(Sum('itemPrice'))
args = {'form': form, 'choice': choice, 'model':records}
return render(request, 'profiles/useLogin.html', args)
else:
return render(request, 'profiles/userLogin.html', {'form': form})
模型.py:
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
class userData(models.Model):
name = models.OneToOneField(User, on_delete=models.CASCADE)
balance = models.IntegerField()
date_of_payment = models.DateTimeField(default = datetime.now())
vendor_number = models.IntegerField()
如果此人选择供应商 1 的单选按钮,则输出应该是该用户欠供应商 1 的总金额。我无法找到我出错的地方。
解决方案
据我所知,表单永远不会获取 POST 数据。请务必将数据提供给表单,以使其具有有效的结果。您可以在您的视图中执行以下操作:
def userKaLog(request):
form = select_vendor_form()
# Check if the current method was a POST method
if request.method=="POST":
# Initiate the form again, but with post data
form = select_vendor_form(request.POST)
if form.is_valid():
choice = form.cleaned_data['Vendor_choices']
choice = int(choice)
records = userData.objects.get(Vendor_number = choice).aggregate(Sum('itemPrice'))
args = {'form': form, 'choice': choice, 'model':records}
return render(request, 'profiles/useLogin.html', args)
# Return the normal results, form will display an error message if POST was triggered
return render(request, 'profiles/userLogin.html', {'form': form})
您可以在此处阅读有关表单的更多信息:Django Forms API
可能是您的 userData 检索出现问题,因为在您当前的模型文件中没有 itemPrice。所以你可能也需要检查一下。
推荐阅读
- flutter - 单击抽屉项目列表时尝试替换脚手架主体时出现黑屏
- python - 以下代码的时间复杂度是多少?O(nlogn) 还是 O(N)?复杂度 O(nlogn) 是什么时候?
- .net - XSLT - 用逗号对数字求和
- java - 如何在创建过程中将对象注册到 ArrayList
- r - R编程:返回ggplot对象而不是grob?
- json - 如何使用 url.Values 为 api 请求生成深度嵌套的字段?
- javascript - 是否可以从 github 版本中导入 deno 中的模块?
- python - 为什么我的导入器 python 库说“没有属性”?
- python - VS Code 怎么会自动激活 virtualenv?
- jestjs - 尽管在 package.json 中进行了配置,但在 monorepo 中对应用程序的 Nestjs e2e 测试无法使用 jest 从库中解析 @app 导入