Как заполнить выпадающий список из выбранного значения другого выпадающего списка в Django
У меня есть 2 модели, одна модель users
, а другая videos
. user_id
действует как внешний ключ для модели videos
.
Я создал 2 выпадающих списка, используя теги select/option.
models.py
class Users(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name
class Videos(models.Model):
user = models.ForeignKey(Users,on_delete=CASCADE)
def __str__(self):
return self.user.name
Я заполнил первый выпадающий список, получив всех пользователей из БД и отправив их в шаблон в файле views.py. Я хочу, чтобы при выборе одного из пользователей в первом выпадающем списке все видео, соответствующие этому пользователю, появлялись в качестве опций во втором выпадающем списке.
<div class="mb-3">
<label class="py-1" for="Select_participant">Select Participant:</label>
<select name = "selected_user" class="form-select" required aria-label="select example">
{% for user in users %}
<option value="{{user.id}}">{{user.name}}</option>
{% endfor %}
</select>
</div>
<div class="mb-3">
<label class="py-1" for="URL">Select Video:</label>
<select class="form-select" required aria-label="select example">
<option value="/path">video1</option>
</select>
</div>
Я не могу понять, как этого добиться. Я думал сначала отправить значение выбранного пользователя в бэкенд, затем отфильтровать видео по этому пользователю и снова вывести шаблон, но это будет очень сложно. Есть ли какие-нибудь простые способы достичь этого? Любая помощь будет принята с благодарностью.
Вы можете использовать htmx. При выборе первого выпадающего списка вы меняете html второго выпадающего списка, вызывая представление с выбранным пользователем. Это представление просто получает соответствующие видео и возвращает их в виде небольшого фрагмента html внутри вашей формы. Вы можете написать это прямо на JavaScript, jQuery и т.д., но htmx делает это намного проще. https://htmx.org/
Вот статья, которая более подробно объясняет, как использовать его в Django.
https://www.mattlayman.com/blog/2021/how-to-htmx-django/
Есть и другие. Просто погуглите htmx и django