Как связать две модели django в представлении

Я пытаюсь разработать приложение, в котором вводятся некоторые данные пациента, алгоритм обрабатывает их и направляет на соответствующую страницу лечения

Мне удалось добиться того, что данные пациента вводятся, а пользователь перенаправляется на представление экземпляра пациента, используя следующий код

Но я не уверен, как в TreatmentDetailView вместо этого представить детали соответствующего лечения, а не экземпляр пациента.

models.py:

class Patient(TimeStampedModel):
    # get a unique id for each patient - could perhaps use this as slug if needed
    patient_id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False)
    name = models.CharField("Patient Name", max_length=255)
    age = models.IntegerField("Age", default=0)

class Treatment(TimeStampedModel):
    name = models.CharField("Treatment Name", max_length=255)

views.py:

class PatientCreateView(LoginRequiredMixin, CreateView):
    model = Patient
    fields = ['name', 'sex', 'age']

    def form_valid(self, form):
        form.instance.creator = self.request.user
        return super().form_valid(form)
    
    def get_success_url(self):
        return reverse('patient:detail',
                       kwargs={"slug": self.object.patient_id})

class TreatmentDetailView(DetailView):
    model = Patient
    slug_field = “patient_id”
    
    def find_treatment(Patient):
        treatment_instance = runalgorithm(Patient)
        return treatment_instance


urls.py

urlpatterns = [
    path(
        route='add/',
        view=views.PatientCreateView.as_view(),
        name='add'),
    
    path(
        route='<slug:slug>/',
        view=views.TreatmentDetailView.as_view(),
        name='detail'),
]

Я думаю, что самым простым решением будет вместо DetailView использовать TemplateView и передать оба объекта в контекст, вместе с пользовательским шаблоном.

class TreatmentDetailView(TemplateView):
    template_name = "treatment.html"

def find_treatment(Patient):
    treatment_instance = runalgorithm(Patient)
    return treatment_instance

def get_context_data(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    context["patient"] = get_object_or_404(
        Patient, pk=self.kwargs['patient_id']
    )
    context"treatment"] = self.find_treatment(context["patient"])
    return context
Вернуться на верх