Как запретить пользователю сохранять экземпляр модели, если он/она не создал экземпляр предыдущей модели?
У меня есть пять ключевых моделей:
class Patient(models.Model):
title=models.ForeignKey(Title, on_delete=CASCADE)
name=models.CharField(max_length=100)
gender=models.ForeignKey(Gender, on_delete=CASCADE)
center=models.ForeignKey(Center, on_delete=CASCADE)
mr_uid=models.CharField(max_length=9)
class Package(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
treatment=models.ForeignKey(Treatment, on_delete=CASCADE)
patient_type=models.ForeignKey(PatientType, on_delete=CASCADE)
date_of_admission=models.DateField(default=None)
max_fractions=models.IntegerField(default=None)
total_package=models.DecimalField(max_digits=10, decimal_places=2)
class Receivables(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
pattern = RegexValidator(r'(RT|rt|rT|Rt)\/[0-9]{4}\/[0-9]{2}\/[0-9]{4}', 'Enter RT Number properly!')
rt_number=models.CharField(max_length=15, validators=[pattern])
discount=models.DecimalField(max_digits=9, decimal_places=2, default=0)
approved_package=models.DecimalField(max_digits=10, decimal_places=2, default=0)
approval_date=models.DateField(default=None)
proposed_fractions=models.IntegerField()
done_fractions=models.IntegerField()
base_value=models.DecimalField(max_digits=10, decimal_places=2, blank=True)
expected_value=models.DecimalField(max_digits=10, decimal_places=2, blank=True)
class Discharge(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
date_of_discharge=models.DateField(default=None)
mould_charges=models.DecimalField(max_digits=7, decimal_places=2, default=0, blank=True)
ct_charges=models.DecimalField(max_digits=7, decimal_places=2, default=0, blank=True)
discharge_updated=models.BooleanField(default=False)
class Realization(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
cash=models.BooleanField(default=False)
amount_received=models.DecimalField(max_digits=10, decimal_places=2, default=0)
billing_month=models.DateField(default=None)
deficit_or_surplus_amount=models.DecimalField(max_digits=8, decimal_places=2, blank=True)
deficit_percentage=models.FloatField(blank=True, default=0)
surplus_percentage=models.FloatField(blank=True, default=0)
remarks=models.TextField(max_length=500, default="N/A")
Основное резюме:
Пациент обращается к врачу. Сразу же принимается решение о его лечении. Если пациент пользуется поддержкой какой-либо государственной программы, пакет направляется на утверждение в государственное учреждение. После получения одобрения рассчитывается дебиторская задолженность. Затем пациент проходит курс лечения и выписывается. После этого мы получаем сумму.
Проблема:
В начале создается профиль пациента. Остальные таблицы будут создаваться по мере наступления событий. Я хочу, чтобы, например, когда оператор ввода данных заполняет форму Receivables
и сохраняет ее, экземпляр Package
уже должен быть для того же пациента, аналогично, когда он заполняет форму Discharge
, экземпляры Package
и Receivables
должны быть там. Они не могут продолжить сохранение текущих данных, не введя предыдущие данные. Для экземпляра Realization
это не обязательно, его можно создать без экземпляра Discharge
. Как я должен это сделать?