Изменение данных модели django на основе ссылки, выбранной в предыдущем представлении
Я хотел бы, чтобы ссылка, на которую нажимает пользователь для инстанцирования модели, была другой на последующем представлении.
У меня есть страница 'tools.html', которая является шаблономView:
urls.py
path(
"tools/",
TemplateView.as_view(template_name="pages/tools.html"),
name="tools",
)
tools.html имеет две ссылки (AP и AD) - обе должны вести на один и тот же шаблон 'se_balance.html' страницу, где пользователи заполняют форму.
Представление для se_balance.html следующее:
class CaseView(TemplateView):
model = Case
template_name = "../templates/se_balance.html"
def get(self, *args, **kwargs):
print('getting')
case_form = CaseForm
sideeffect_formset = SideeffectFormSet(queryset=SideEffect.objects.none())
return self.render_to_response(
{ "case_form": case_form,
"sideeffect_formset": sideeffect_formset,
"sideeffect_formsethelper": SideEffectFormSetSetHelper,
}
)
Модель 'Case' выглядит следующим образом:
class Case(TimeStampedModel):
# get a unique id for each patient - could perhaps use this as slug if needed
case_id = models.UUIDField(
primary_key=True, unique=True, default=uuid.uuid4, editable=False
)
# Remove blank=True if we want to make login compulsory
user = models.ForeignKey(
settings.AUTH_USER_MODEL, blank=True, null=True, on_delete=models.SET_NULL
)
P_CHOICES = [(‘AD’, ‘AD’),
(‘AP’, ‘AP’),]
В зависимости от ссылки, которая была нажата в tools.html, я бы хотел, чтобы модель инстанцировалась по-разному (т.е. с P_CHOICEs как 'AD' или 'AP', но я не уверен в правильном способе сделать это?
Спасибо!
В обе ссылки в tools.html можно добавить параметр запроса, например p, который затем можно получить в CaseView. Например:
<a href="/link-to/se-balance?p=AP">AP</a>
<a href="/link-to/se-balance?p=AD"> AD </a>
Вы можете расширить это, отправив P_CHOICES в контекст шаблона tools.html, что будет выглядеть примерно так:
{% for choice_value, choice_label in P_CHOICES %}
<a href="/link-to/se-balance?p={{ choice_value }}">{{ choice_label }}</a>
{% endfor %}