Как связать две модели 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