Как передать выбор из шаблона 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')

Вернуться на верх