Как запретить пользователю сохранять экземпляр модели, если он/она не создал экземпляр предыдущей модели?

У меня есть пять ключевых моделей:

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. Как я должен это сделать?

Вернуться на верх