首页 > 解决方案 > Django 'decimal.Decimal' 对象中的视图函数中的错误不可迭代

问题描述

我有三个模型


# My models here.
from django.db import models
from datetime import date
from django import forms
from django.urls import reverse
from configration.models import Site, Department, Category, Designation, Rate

class EmployeeRegistration(models.Model):
    #Departmental Details
    
    EmpId = models.IntegerField(verbose_name='EmpId')
    Site = models.ForeignKey(Site,on_delete=models.CASCADE,max_length=150,verbose_name='Site')
    Department = models.ForeignKey(Department,on_delete=models.CASCADE,max_length=150,verbose_name='Department')
    Category = models.ForeignKey(Category,on_delete=models.CASCADE,max_length=150,verbose_name='Category')
    Designation = models.ForeignKey(Designation,on_delete=models.CASCADE,max_length=150,verbose_name='Designation')
    PfAllowance = models.BooleanField(default = True)
    EsiAllowance = models.BooleanField(default = True)
    Uan = models.PositiveIntegerField(null = True,verbose_name='Uan')
    Pf = models.PositiveIntegerField(null = True,verbose_name='Pf')
    Esic = models.PositiveIntegerField(null = True,verbose_name='Esic')
    AttendenceAward = models.BooleanField(default = True)
    AttendenceAllowance = models.BooleanField(default = True)
    ProfesionalTax = models.BooleanField(default = False)
    Name = models.CharField(max_length=150,verbose_name='Name')
    Father = models.CharField(max_length=150,verbose_name='Father')
    Dob = models.DateField()
    Male = models.BooleanField(default = True)
    Female = models.BooleanField(default = False)
    MaritalStatus = models.BooleanField(default = True)
    Address = models.CharField(max_length=200,verbose_name='Address')
    Aadhar = models.PositiveIntegerField(null=True)
    pan = models.CharField(max_length=10)
    choices = [('Working','WORKING'),('NotWorking','NOT WORKING'),('Leave','Leave')]
    Status = models.CharField(choices=choices,blank = False,max_length=10,verbose_name='Status')
    Doj = models.DateField(default = date.today)
    Doe = models.DateField(blank = True,verbose_name = 'Doe',null = True)

    def __str__(self):
        return '{name}'.format(name=self.Name)
  

class EmployeeRate(models.Model):
    EmpId = models.IntegerField(verbose_name='EmpId')
    Name = models.CharField(max_length=200,verbose_name='Name')
    Site = models.CharField(max_length=100,verbose_name='Site')
    Basic = models.IntegerField(verbose_name='Basic')
    Da = models.IntegerField(verbose_name='Da')
    Rate = models.IntegerField(verbose_name='Rate')
    Hra = models.IntegerField(verbose_name='Hra',null=True)
    Ca = models.IntegerField(verbose_name='Ca',null=True)
    SplAllow = models.IntegerField(verbose_name='SplAllow',null=True)
    CanteenAllow = models.IntegerField(verbose_name='CanteenAllow',null=True)
    DateFrom = models.DateField()

    def __str__(self):
        return '{name}_{EmpId}'.format(name=self.Name,EmpId=self.EmpId)
`
class Rate(models.Model):
    Site = models.ForeignKey(Site,on_delete=models.CASCADE)
    Category = models.ForeignKey(Category,on_delete=models.CASCADE,default=False)
    Department = models.ForeignKey(Department,on_delete=models.CASCADE,default=False)
    Basic = models.DecimalField(max_digits=10,decimal_places=2)
    Da = models.DecimalField(max_digits=10,decimal_places=2)
    Rate = models.DecimalField(max_digits=10,decimal_places=2)
    Hra = models.DecimalField(max_digits=10,decimal_places=2)
    Ca = models.DecimalField(max_digits=10,decimal_places=2)
    SplAllow = models.DecimalField(max_digits=10,decimal_places=2)
    CanteenAllow = models.DecimalField(max_digits=10,decimal_places=2)
    fromDate = models.DateField()
    def __str__(self):
        return '{site}_{cat}'.format(site =self.Site,cat=self.Category)

    


请提供一些帮助或提示为什么我在我的视图函数中收到此错误

def EmployeeRateView(request):
    msg = ''
    try:
        fromDate = request.POST.get('fromdate')
    except:
        msg = "Pleas enter valid date"


    if request.method == 'POST':
        RateData = EmployeeRate.objects.filter(Site=request.user.SuperVisor.Site,DateFrom=fromDate)
    return render(request,"employeerate.html",{"EmployeeRate":RateData,"msg":msg})
    else:
        print("get")
        rate = Rate.objects.filter(Site=request.user.SuperVisor.Site)
        EmpDetails = EmployeeRegistration.objects.filter(Site=request.user.SuperVisor.Site,Status="Working")
        for  employee in EmpDetails:
            for get in rate:
                print("date",get.fromDate)
                if(employee.Site==get.Site and employee.Category==get.Category and employee.Department==get.Department):
                    try:
                        check = EmployeeRate.objects.get(EmpId=employee.EmpId,DateFrom=get.fromDate)
                        print("found",check.EmpId,check.Name,get.fromDate)
                    except:
                        print("not found",check.EmpId,check.Name,get.fromDate)
                        rate = get.Basic+get.Da
                        print(rate)
                        print("basic",get.Basic,"da",get.Da,"rate",rate) 
                        EmployeeRate.objects.create(EmpId=employee.EmpId,
                                                    Name=employee.Name,
                                                    Site=employee.Site,
                                                    Basic=get.Basic,
                                                    Da=get.Da,Rate=rate,
                                                    Hra=get.Hra,
                                                    Ca=get.Ca,
                                                    SplAllow=get.SplAllow,
                                                    CanteenAllow=get.CanteenAllow,
                                                    DateFrom=get.fromDate)
               
          context = {'EmployeeRate':EmployeeRate.objects.filter(Site=request.user.SuperVisor.Site).order_by('Name'),'msg':msg}
    return render(request,"employeerate.html",context)

这是我的模板代码

  {% if msg %}
        <p class="alert alert-warning">{{msg}}</p>
      {% endif %}
<div class="container" style=" padding: 0 !important; margin-top: 15px;background-color: #ffffff">
<div class="card">
  <div class="card-header bg-info">
    <i class="fas fa-book fa-3x" style="color:#ffffff"> EMPLOYEE RATE</i>
  </div>
<a href="{% url 'rate' %}" class="btn btn-warning" style="font-weight:900; color: whitesmoke;">Update Rate</a>
<form method="POST" action="{% url 'rate' %}"> {% csrf_token %}
        <div class="row justify-content-center">
        <div class="col-md-4" style="margin-top: 5px; margin-bottom: 5px;">
            <input type="date" class="form-control" id="publishDateMax" name="fromdate">
          </div>
                            <button type="Submit" class="btn btn-primary" style="float: right;">
                                Filter
                            </button>
                        </div>
                        </form>
<table class="table table-borderless table-hover" style="margin-left:10px !important;margin-right:10px !important;">
    <threed class="border-bottom font-weight-bold">
        <tr>
            <th>EmpId</th>
            <th>Name</th>
            <th>Basic</th>
            <th>Da</th>
            <th>Rate</th>
            <th>Hra</th>
            <th>Ca</th>
            <th>SplAllow</th>
            <th>Canteen</th>
            <th>From Date</th>
        </tr>
        {% for ratedetails in EmployeeRate %}
            <tr>
                <td>{{ ratedetails.EmpId }}</td>
                <td>{{ ratedetails.Name }}</td>
                <td>{{ ratedetails.Basic }}</td>
                <td>{{ ratedetails.Da }}</td>
                <td>{{ ratedetails.Rate }}</td>
                <td>{{ ratedetails.Hra }}</td>
                <td>{{ ratedetails.Ca }}</td>
                <td>{{ ratedetails.SplAllow }}</td>
                <td>{{ ratedetails.CanteenAllow }}</td>
                <td>{{ ratedetails.DateFrom }}</td>
            </tr>
            {% endfor %}
        </threed>
    </table>
</div>
</div>
{% endblock %}


这是我的终端和浏览器中的错误基本上我正在尝试根据过滤器和条件在 EmployeRate 模型中保存或创建一些数据。但最后它给了我这种类型的错误。我无法理解为什么它会这样显示。

在浏览器中显示错误

标签: python-3.xdjangodjango-viewsdjango-formspython-requests

解决方案


最后我克服了这种情况并找到了我的解决方案。

其实问题就在这里

for  employee in EmpDetails:
            **for get in rate:** #looping in rate and initializing a variable by same name rate withing for loop of rate
                print("date",get.fromDate)
                if(employee.Site==get.Site and employee.Category==get.Category and employee.Department==get.Department):
                    try:
                        check = EmployeeRate.objects.get(EmpId=employee.EmpId,DateFrom=get.fromDate)
                        print("found",check.EmpId,check.Name,get.fromDate)
                    except:
                        print("not found",check.EmpId,check.Name,get.fromDate)
                        **rate = get.Basic+get.Da** # this was the actual error
                        print(rate)
                        print("basic",get.Basic,"da",get.Da,"rate",rate) 

推荐阅读