#python #django #django-models #django-views
Вопрос:
Я пытаюсь разработать приложение, в котором вводятся некоторые сведения о пациенте, алгоритм обрабатывает их и направляет на соответствующую страницу лечения
Мне удалось получить его, чтобы ввести данные о пациенте, и пользователь перенаправляется на просмотр этого экземпляра пациента, используя приведенный ниже код
Но я не уверен, как в 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'),
]
Комментарии:
1. Чтобы уточнить, вам нужны сведения о пациенте на этой странице, а также сведения о лечении или только сведения о лечении?
2. Было бы полезно также представить некоторые сведения о пациенте на странице, но самое главное-получить подробную информацию о лечении
Ответ №1:
Я думаю, что самым простым решением было бы вместо использования подробного представления использовать представление шаблона и передать оба объекта в контекст вместе с пользовательским шаблоном.
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
Комментарии:
1. Большое спасибо — это гораздо лучший способ. Было всего несколько небольших опечаток, которые вы, возможно, захотите исправить: функции «find_treatment» требуется «self» в качестве начального аргумента, или вы получаете количество ошибок в аргументах, и в предпоследней строке отсутствует» [»