Как передать выбор из шаблона Django в представление Class
Я борюсь с тем, что уже должно быть для меня обычным делом, но у меня есть умственный блок. У меня есть модель, в которой хранятся названия стран и slug-версия названия.
Например, "Соединенные Штаты", "united-states"
Я хочу отобразить названия стран в шаблоне для выбора, затем вернуть значение slug выбранной страны в представление на основе класса, которое затем получит данные. Список стран может быть в виде ссылок или выпадающего списка - как угодно. Но мне нужно получить выбранное значение в представлении. Вот упрощенная версия:
Шаблон
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% for country in object_list %}
<a href="{{country.slug_name}}">{{ country.pretty_name }}</a></br>
{% endfor %}
</form>
{% endblock content %}
View
class CountryView(TemplateView):
country_name = THE SLUG
country_obj = Country(country_name)
country_obj.build_country_dictionary()
country_obj.display()
Так что я думаю, что мне нужен один из методов get для доступа к этому, но я не могу разобраться с этим. Спасибо за любую помощь.
"Структурированный способ"
Посмотрите на FormView, где вы определяете класс вашей формы (который вам также необходимо создать, в зависимости от вашей ситуации это может быть и модель формы). Остальное в основном обрабатывается представлением.
https://ccbv.co.uk/projects/Django/4.0/django.views.generic.edit/FormView/
PSEUDO код
class MyForm(ModelForm):
model = YourModel
class MyFormView(FormView):
form_class = MyForm
# depends on what you want to do, you can overwrite form_valid to do your logic
Самый быстрый способ
PSEUDO код
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% csrf_token %}
<select name="selection">
{% for country in object_list %}
<option value="{{ country.slug_name }}">{{ country.pretty_name }}</option>
{% endfor %}
</select>
<input type="submit">Submit</input>
</form>
{% endblock content %}
class CountryView(TemplateView):
def post(self, request, *args, **kwargs):
selection = request.POST.get('selection')