Как получить значение <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)