Заполнение выпадающего списка из столбца базы данных без повторений - Django

Я изучаю Django, создавая приложение для бронирования хостелов. Я хочу, чтобы выпадающий список в index.html заполнялся из колонки базы данных под названием "location". Я хотел бы получать вторые элементы (человекочитаемые имена) без повторений. До сих пор я пробовал, как показано в кодах ниже, но я получаю повторения, когда у меня много хостелов, имеющих одинаковое местоположение. Я понимаю, что для получения списка отличительных имен столбцов из базы данных нужно использовать distinct() в сочетании с values(). Но как мне использовать distinct() и get_FOO_display() одновременно, чтобы получить как отдельные столбцы, так и вторые элементы кортежей. Или есть другой подход?

models.py

HOST_LOCATION=[('KM', 'Kings Main Campus'),
               ('KT', 'Kings Town Campus'),
               ('KK', 'Kings Kitale Campus'),
               ('KE', 'Kings Eldoret Branch')]

class Hostel(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(null=False, unique=True, blank=True)
    location = models.CharField(max_length=50, choices=HOST_LOCATION, default=None, null=False)
    landlord = models.ForeignKey(User, on_delete=models.CASCADE, default=None)

    def __str__(self):
        return self.name

Views.py

def index(request):
    Host = Hostel.objects.all()
    return render(request, 'index.html', {'Host': Host})

Шаблон

<select class="custom-select" id="inputGroupSelect04">
   <option selected disabled> SELECT A CAMPUS TO FIND HOSTEL</option>
      {% for entry in Host %}
           <option value="{{ entry.id }}">{{ entry.get_location_display }}</option>
      {% endfor %}
</select>

Базовым решением будет передача вариантов выбора в контекст и цикл по ним в select options

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