Как получить значение <option> в представлении django?

У меня есть форма с опцией выбора страны, из которой вы приехали. В моей модели у меня есть поле country_living с вариантами выбора:

LIVING_COUNTRIES = [
    ('AFGANISTAN', 'Afganistan'),
    ('ALBANIA', 'Albania'),
    ('ALGERIA', 'Algeria'),
    ('ANGORRA', 'Andorra'),
    ('ANGOLA', 'Angola')]

class Employee(models.Model):
    user                =               models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
    first_name          =               models.CharField(max_length=100, blank=True)
    last_name           =               models.CharField(max_length=100, blank=True)
    username            =               models.CharField(max_length=30, blank=True)
    email               =               models.EmailField(max_length=140, blank=True)
    date_of_birth       =               models.DateField(blank=True, default='1929-11-11')
    education           =               models.CharField(max_length=50, blank=True)
    country_living      =               models.CharField(max_length=50, choices=LIVING_COUNTRIES, default='AFGANISTAN', blank=True)
    created_at          =               models.DateTimeField(auto_now_add=True, blank=True)
    password            =               models.CharField(max_length=30, null=True)

В моем представлении, основанном на классе, я получаю такие поля, как:

    def get(self, request):

        employees = models.Employee.objects.all()
        living_countries_list = LIVING_COUNTRIES
        context = {
            'employees': employees,
            'living_countries_list': living_countries_list
        }
        return render(request, 'authentication/employee_register.html', context)

и мой html:

<select name="country" id="id_category">
    {% for each in living_countries_list %}
       <option value="{{ each.0 }}" class="living_countries">{{ each.1 }}</option>
    {% endfor %}
 </select>

В моем методе post я получаю опцию и проверяю, существует ли она

country = request.POST.get('coutry')
if not country:
     print('no country')
     context['has_error'] = True
     print(country)

Проблема в том, что даже если страна выбрана, когда я нажимаю кнопку submit, я не могу получить ее значение

Спасибо за помощь:)

Я думаю ошибка в request.POST.get('coutry), которая должна быть request.POST.get('country).

Почему он не дает значения, потому что request.POST.get возвращает значение для ключа, если ключ находится в словаре, иначе default. Если значение default не задано, оно по умолчанию равно None, так что этот метод никогда не вызовет ошибку KeyError. В нашем случае вы неправильно ввели имя переменной, поэтому метод выдает значение None для страны.

И немного о том, как использовать request.POST.get (Что возвращает метод request.POST.get в Django? )

и я рекомендую добавить print(request.POST) в представление, чтобы увидеть фактический пост данных в терминале для отладки.

# you can add here
print(request.POST)

country = request.POST.get('coutry')
if not country:
     print('no country')
     context['has_error'] = True
     print(country)

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