我正在尝试创建一个网站,以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"),
]
forms.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)
views.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})
models.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的总金额。我无法找到我要去的地方。
答案 0 :(得分:0)
据我所知,该表格从不获取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})
您可以在此处了解有关表单的更多信息:The Django Forms API
在您的userData检索中可能出了点问题,因为在当前模型文件中没有itemPrice。因此,您可能也需要检查一下。