python-3.x - 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 模型中保存或创建一些数据。但最后它给了我这种类型的错误。我无法理解为什么它会这样显示。
解决方案
最后我克服了这种情况并找到了我的解决方案。
其实问题就在这里
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)
推荐阅读
- compiler-errors - 头文件冲突定义
- python - 将 Fortran DO WHILE 循环转换为 Python
- javascript - 无法正确找到多选下拉字段的选定选项
- c# - Get Memory Address of Loaded Assemblies
- opencv - Matplotlib 中的 RGB 图像显示:plt.imshow 返回蓝色图像
- tsql - 如何保证不同表中的两列具有相同的值
- c# - 从应用程序中显示的 JSON 文件中检索数据,但在 Unity 编辑器中没有
- php - 根据数据库对计算值进行排序
- javascript - 以角度检索单个firestore文档
- r - gsub 不适用于字符串 - 提示可能出错的地方