无法在Django中使用RadioSelect按钮获取输出

时间:2019-12-12 19:10:27

标签: django django-forms django-templates django-views

我正在尝试创建一个网站,以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的总金额。我无法找到我要去的地方。

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。因此,您可能也需要检查一下。