Как сделать выпадающий список с тегом <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>
Вернуться на верх