Как сделать выпадающий список с тегом <options> в html из вариантов выбора в модели django?
У меня есть приложение аутентификации с
модели:
LIVING_COUNTRIES = [
('AFGANISTAN', 'Afganistan'),
('ALBANIA', 'Albania'),
('ALGERIA', 'Algeria'),
('ANGORRA', 'Andorra'),
('ANGOLA', 'Angola')]
class Employee(models.Model):
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)
# phone_number = PhoneNumberField(null=True)
date_of_birth = models.DateField(blank=True, default='1929-22-22')
education = models.CharField(max_length=50, blank=True)
country_living = models.CharField(max_length=50, choices=LIVING_COUNTRIES, default='UNITEDSTATESOFAMERICA', blank=True)
created_at = models.DateTimeField(auto_now_add=True, blank=True)
password = models.CharField(max_length=30, null=True)
Теперь я хочу отобразить поле country_living в моей html-форме.
Я пробовал так:
<select name="category" id="id_category">
{% for category in living_countries.country_living %}
<option value="{{ category.country_living }}">{{ category.country_living }</option>
{% endfor %}
</select>
def get(self, request):
context = {}
living_countries = models.Employee.objects.all()
context['living_countries'] = living_countries
return render(request, 'authentication/employee_register.html', context)
Но это не работает. Кто-нибудь знает, как получить доступ и отобразить это поле?
LIVING_COUNTRIES
- это список в вашем файле models.py, но он находится вне модели Employee, поэтому нет способа отобразить его внутри представления и из представления в шаблон.
чтобы решить это в ваших представлениях, вы можете сделать из from .models import *
.
таким образом модель и список будут доступны нам.
Лучшим способом работы было бы иметь модель для LivingCountries
и использовать ее в качестве отношения один-к-одному с моделью Employee
.
Далее, в представлениях необходимо исправить запрос с models.Employee.objects.all()
на Employee.objects.all()
функцию представления можно упростить следующим образом, а список должен быть передан в функции следующим образом
def get(request):
employees = Employee.objects.all()
living_countries_list = LIVING_COUNTRIES
return render(request, 'authentication/employee_register.html', {
'employees': employees,
'living_countries_list': living_countries_list
})
<
<
<select name="category" id="id_category">
{% for each in living_countries_list %}
<option value="{{ each.0 }}">{{ each.1 }</option>
{% endfor %}
</select>