【发布时间】:2021-03-01 11:05:01
【问题描述】:
我有一个表单,用户可以在其中输入以逗号分隔的十进制/整数值,例如 500,000 或 500,000.00。当我使用 Django ModelForm 处理该字段时,它会引发验证错误,例如 Enter a number,我想在值进入 DB 之前删除那些“,”。join_bonus 和 var_pay 字段具有属性 required=False 但是仍然这些字段引发“此字段是必需的”。验证错误。
我的表格:
class EmployeeSalaryForm(forms.ModelForm):
class Meta:
model = Salary
fields = [
'basic_salary',
'convyence_allowance',
'medical_allowance',
'mobile_allowance',
'executive_allowance',
'gross_salary',
'epf',
'health_benefit',
'ctc',
'join_bonus',
'var_pay',
]
basic_salary = forms.DecimalField(max_digits=11,decimal_places=2)
convyence_allowance = forms.DecimalField(max_digits=11,decimal_places=2)
medical_allowance = forms.DecimalField(max_digits=11,decimal_places=2)
mobile_allowance = forms.DecimalField(max_digits=11,decimal_places=2)
executive_allowance = forms.DecimalField(max_digits=11,decimal_places=2)
gross_salary = forms.DecimalField(max_digits=11,decimal_places=2)
epf = forms.DecimalField(max_digits=11,decimal_places=2)
health_benefit = forms.DecimalField(max_digits=11,decimal_places=2)
ctc = forms.DecimalField(max_digits=11,decimal_places=2)
join_bonus = forms.DecimalField(max_digits=11,decimal_places=2, required=False)
var_pay = forms.DecimalField(max_digits=11,decimal_places=2, required=False)
def clean_basic_salary(self):
basic_salary = self.cleaned_data['basic_salary']
return basic_salary.replace(',', '')
def clean_convyence_allowance(self):
convyence_allowance = self.cleaned_data['convyence_allowance']
return convyence_allowance.replace(',', '')
def clean_medical_allowance(self):
medical_allowance = self.cleaned_data['medical_allowance']
return medical_allowance.replace(',', '')
def clean_mobile_allowance(self):
mobile_allowance = self.cleaned_data['mobile_allowance']
return mobile_allowance.replace(',', '')
def clean_executive_allowance(self):
executive_allowance = self.cleaned_data['executive_allowance']
return executive_allowance.replace(',', '')
def clean_gross_salary(self):
gross_salary = self.cleaned_data['gross_salary']
return gross_salary.replace(',', '')
def clean_epf(self):
epf = self.cleaned_data['epf']
return epf.replace(',', '')
def clean_health_benefit(self):
health_benefit = self.cleaned_data['health_benefit']
return health_benefit.replace(',', '')
def clean_ctc(self):
ctc = self.cleaned_data['ctc']
return ctc.replace(',', '')
def clean_join_bonus(self):
join_bonus = self.cleaned_data['join_bonus']
return 0 if join_bonus == None else join_bonus.replace(',', '')
def clean_var_pay(self):
var_pay = self.cleaned_data['var_pay']
return 0 if var_pay == None else var_pay.replace(',', '')
薪酬模式:
class Salary(models.Model):
class Meta:
db_table = 'emp_salary_master'
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
basic_salary = models.DecimalField(max_digits=11, decimal_places=2)
hra = models.DecimalField(max_digits=11, decimal_places=2)
convyence_allowance = models.DecimalField(max_digits=11, decimal_places=2)
medical_allowance = models.DecimalField(max_digits=11, decimal_places=2)
mobile_allowance = models.DecimalField(max_digits=11, decimal_places=2)
executive_allowance = models.DecimalField(max_digits=11, decimal_places=2)
gross_salary = models.DecimalField(max_digits=11, decimal_places=2)
epf = models.DecimalField(max_digits=11, decimal_places=2)
health_benefit = models.DecimalField(max_digits=11, decimal_places=2)
ctc = models.DecimalField(max_digits=11, decimal_places=2)
join_bonus = models.DecimalField(max_digits=11, decimal_places=2, default=0)
var_pay = models.DecimalField(max_digits=11, decimal_places=2, default=0)
to_date = models.DateField()
from_date = models.DateField()
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now_add=True)
【问题讨论】:
标签: python python-3.x django django-forms