ValidationError at /opd/ [''Значение объекта OPDCashSheet (2)'' должно быть десятичным числом.'] Как модель-объект может быть десятичным числом?
models.py:
class Opd(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
bill_number=models.IntegerField(default=None)
date=models.DateField(default=datetime.date.today)
service_name=models.ForeignKey(ServiceName, on_delete=SET_NULL, null=True)
mode=models.CharField(max_length=5, default=None)
amount=models.DecimalField(max_digits=7, decimal_places=2)
remarks=models.TextField(max_length=500, blank=True, default=None)
opd_date=models.DateTimeField(auto_now_add=True)
modified_on=models.DateTimeField(auto_now=True)
def __str__(self):
return self.patient.name
class OPDParticulars(models.Model):
opd_particulars=models.CharField(max_length=150)
def __str__(self):
return self.opd_particulars
class OPDCashSheet(models.Model):
date=models.DateField(default=datetime.date.today)
patient=models.ForeignKey(Patient, on_delete=SET_NULL, blank=True, null=True)
opd=models.ForeignKey(Opd, on_delete=SET_NULL, null=True, blank=True)
opd_particulars=models.ForeignKey(OPDParticulars, on_delete=SET_NULL, null=True, blank=True)
source=models.CharField(max_length=10, default='OPD', null=True, blank=True)
case_number=models.IntegerField(null=True, blank=True)
mode=models.CharField(max_length=5)
cash_in=models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)
cash_out=models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)
balance=models.DecimalField(max_digits=7, decimal_places=2, default=0)
bank_oopl=models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)
remarks=models.TextField(max_length=500, blank=True, null=True, default=None)
created_on=models.DateTimeField(auto_now_add=True)
modified_on=models.DateTimeField(auto_now=True)
class BankDeposits(models.Model):
opdcashsheet=models.ForeignKey(OPDCashSheet, on_delete=SET_NULL, null=True, blank=True)
date=models.DateField(default=None)
amount=models.DecimalField(max_digits=7, decimal_places=2, default=None)
bank=models.CharField(max_length=70, default=None, null=True, blank=True)
mode=models.CharField(max_length=5, default=None)
bank_ac=models.CharField(max_length=25, default='ABC Pvt. 123456789')
branch=models.CharField(max_length=20, default='XYZ')
remarks=models.TextField(max_length=500, blank=True, null=True, default=None)
created_on=models.DateTimeField(auto_now_add=True)
modified_on=models.DateTimeField(auto_now=True)
forms.py:
class UpdateOPDCashSheetForm(ModelForm):
MODE_SELECT = (
('cash', 'Cash'),
('bank', 'Bank'),
)
mode=forms.CharField(widget=forms.RadioSelect(choices=MODE_SELECT, attrs={'class': 'form-check-inline'}))
class Meta:
model=OPDCashSheet
labels={
'cash_in':'Cash-in',
'cash_out':'Cash-Out',
'balance':'Cash Balance',
'bank_oopl':'To Bank',
'opd_particulars':'Description',
}
fields='__all__'
widgets={
'date': DateInput(attrs={'type': 'date'}),
}
class BankDepositsForm(ModelForm):
MODE_SELECT = (
('cash', 'Cash'),
('bank', 'Bank'),
)
mode=forms.CharField(widget=forms.RadioSelect(choices=MODE_SELECT, attrs={'class': 'form-check-inline'}))
class Meta:
model=BankDeposits
labels={
'bank_ac':'Bank A/c',
}
fields='__all__'
widgets={
'date': DateInput(attrs={'type': 'date'}),
}
class OpdForm(ModelForm):
MODE_SELECT = (
('cash', 'Cash'),
('bank', 'Bank'),
)
mode=forms.CharField(widget=forms.RadioSelect(choices=MODE_SELECT, attrs={'class': 'form-check-inline'}))
class Meta:
model=Opd
fields='__all__'
widgets={
'date': DateInput(attrs={'type': 'date'}),
}
views.py:
def opd_view(request):
if request.method=='POST':
fm_opd=OpdForm(request.POST)
if fm_opd.is_valid():
opd=fm_opd.save()
OpdReport.objects.create(patient=opd.patient, opd=opd)
if opd.mode=='cash':
OPDCashSheet.objects.create(date=opd.date, patient=opd.patient, opd=opd, case_number=opd.bill_number, mode=opd.mode, cash_in=opd.amount)
elif opd.mode=='bank':
opdcashsheet=OPDCashSheet.objects.create(date=opd.date, patient=opd.patient, opd=opd, case_number=opd.bill_number, mode=opd.mode, bank_oopl=opd.amount)
BankDeposits.objects.create(opdcashsheet=opdcashsheet.id, date=opd.date, amount=opd.amount, mode=opd.mode, remarks=opd.remarks)
fm_opd=OpdForm()
return render(request, 'account/opd.html', {'form1':fm_opd})
else:
fm_opd=OpdForm()
return render(request, 'account/opd.html', {'form1':fm_opd})
Переходя к view, все работало нормально, когда mode был cash и он создал объект для OPDCashSheet, но когда mode был bank, он не может создать объект для той же модели, указывая ValidationError - ['“OPDCashSheet object (2)” value must be a decimal number.']. Теперь, если бы этот объект мог быть создан, он был бы OPDCashSheet object (3), так как второй объект уже сохранен в базе данных. Так где же я ошибаюсь? Как объект модели может быть десятичным полем? Пожалуйста, помогите.