Условное утверждение If-else - PullRequest
0 голосов
/ 23 октября 2019

Я создаю свое первое приложение в Django, и у меня возникают проблемы с условным циклом. Я хочу создать форму, в которой пользователи будут вводить свое имя, размер семьи и доход, и он будет рассчитывать, где они окажутся по скользящей шкале (A, B, C или Overqualify), основываясь на их доходе. Я ожидаю, что он выведет одну шкалу (A, B, C или Overqualify), но она продолжает циклически повторяться - так что я получаю:

Что я получаю

Если кто-то может помочь мне или указать мне какие-либо ресурсы, потому что я только начал изучать python и django, так что я очень застрял.

Спасибо!

models.py

from django.db import models

# Create your models here.
class SlidingScale(models.Model):
    scale = models.CharField(max_length=1)
    family_size = models.IntegerField()
    min_annual = models.IntegerField(default = 0)
    max_annual = models.IntegerField()

    def __str__(self):
        return self.scale

forms.py

from django import forms

class SlidingForm(forms.Form):
   name = forms.CharField(max_length = 100)
   household = forms.IntegerField()
   income = forms.IntegerField()

views.py

 from django.shortcuts import render 
    from django.template.response import TemplateResponse 
    from .models import SlidingScale 
    from .forms import SlidingForm

# Create your views here. def index(request):
    return render(request, 'index.html', {})


def calculator(request):
    if request.method == "POST":
        #Get the posted form
        form = SlidingForm(request.POST)
        data = SlidingScale.objects.all()

        if form.is_valid():
            name = form.cleaned_data['name']
            household = form.cleaned_data['household']
            income = form.cleaned_data['income']
    else:
        form = SlidingForm()

    return render(request, 'result.html', {"name" : name, "household": household, "income":income, "data": data}) 

result.html

{% extends 'base.html' %}

<!--start title -->
{% block title%}
  Result
{% endblock %}

<!-- start body -->
{% block content%}
      <strong>{{ name }}</strong>, based on your income of <strong>{{income}}</strong> and household size of
      <strong>{{household}}</strong>,

      {% for i in data %}
        {% if i.family_size == household and income >= i.min_annual and income <= i.max_annual %}
          <p> You qualify for: {{ i.scale }} </p>
        {% else %}
          <p> You overqualify </p>
        {% endif %}
      {% endfor %}



{% endblock %}

1 Ответ

0 голосов
/ 23 октября 2019

Тебе вообще не нужен цикл. Вы хотите получить нужный элемент из базы данных для начала.

if form.is_valid():
    name = form.cleaned_data['name']
    household = form.cleaned_data['household']
    income = form.cleaned_data['income']
    scale = SlidingScale.objects.filter(
        family_size=household, min_annual__lte=income, max_annual__gte=income
    ).first()
    return render(request, 'result.html',
        {"name" : name, "household": household, "income":income, "scale": scale}
    )

И в шаблоне:

  <strong>{{ name }}</strong>, based on your income of <strong>{{income}}</strong> and household size of
  <strong>{{household}}</strong>,

  {% if scale %}
      <p> You qualify for: {{ scale.scale }} </p>
  {% else %}
      <p> You overqualify </p>
  {% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...