Как создать выпадающий список в django?

Пользователь

от nicolette.stoltenberg , в категории: Python , 9 месяцев назад

Как создать выпадающий список в django?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от felix , 9 месяцев назад

@nicolette.stoltenberg 

В Django можно создать выпадающий список с помощью формы и полей ChoiceField или ModelChoiceField.


Пример создания выпадающего списка с данными из заданного списка:

  1. Создайте форму, которая будет содержать поле ChoiceField:
1
2
3
4
5
6
7
8
9
from django import forms

class MyForm(forms.Form):
    my_choices = (
        ('value1', 'Label 1'),
        ('value2', 'Label 2'),
        ('value3', 'Label 3'),
    )
    my_field = forms.ChoiceField(choices=my_choices, widget=forms.Select())


  1. В представлении, создайте экземпляр формы и передайте его в контекст шаблона:
1
2
3
4
5
6
from django.shortcuts import render
from .forms import MyForm

def my_view(request):
    form = MyForm()
    return render(request, 'my_template.html', {'form': form})


  1. В шаблоне, добавьте код для отображения формы:
1
2
3
4
5
    {% csrf_token %}
    {{ form }}
    


Теперь при отображении страницы по указанному URL будет отображаться выпадающий список с заданными значениями.


Пример создания выпадающего списка с данными из модели:

  1. Определите модель:
1
2
3
4
5
6
7
from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


  1. Создайте форму, которая будет содержать поле ModelChoiceField:
1
2
3
4
5
from django import forms
from .models import MyModel

class MyForm(forms.Form):
    my_field = forms.ModelChoiceField(queryset=MyModel.objects.all(), widget=forms.Select())


  1. В представлении, создайте экземпляр формы и передайте его в контекст шаблона:
1
2
3
4
5
6
from django.shortcuts import render
from .forms import MyForm

def my_view(request):
    form = MyForm()
    return render(request, 'my_template.html', {'form': form})


  1. В шаблоне, добавьте код для отображения формы:
1
2
3
4
5
    {% csrf_token %}
    {{ form }}
    


Теперь при отображении страницы по указанному URL будет отображаться выпадающий список с данными из модели.

Пользователь

от lori_jast , 23 дня назад

@nicolette.stoltenberg 

Дополнительно к вышеприведенному ответу хочу отметить, что при использовании ModelChoiceField в форме Django, необходимо учитывать методы str модели, так как они определяют представление объектов модели в виде строки и задействуются при построении выпадающего списка.ModelChoiceField используется для связывания с данными из модели и автоматического отображения в виде выпадающего списка на основе объектов модели. В примере, приведенном выше, поле my_field в форме MyForm связывается с объектами MyModel, передавая все объекты из MyModel.objects.all() в выпадающий список.


Также при использовании ModelChoiceField, рекомендуется добавить в шаблон форму вручную при помощи цикла, чтобы настроить отображение выпадающего списка более детально:

1
2
3
4
5
6
7
8
<form method="POST">
    {% csrf_token %}
    <select name="my_field">
        {% for obj in form.my_field %}
            <option value="{{ obj.value }}">{{ obj.label_tag }}</option>
        {% endfor %}
    </select>
</form>


Таким образом, можно создать более кастомизированный вывод выпадающего списка, управляя каждым элементом списка отдельно.

Пользователь

от rebekah , 20 дней назад

@nicolette.stoltenberg 

Извиняюсь за недочет. Приведенный вариант позволяет больше гибкости в управлении отображением выпадающего списка в шаблоне формы. Благодаря циклу for можно настроить каждый элемент выпадающего списка по-отдельности, например, добавить дополнительные атрибуты или стили для каждого элемента. Также это даёт больше контроля над оформлением формы и элементов.Field отображается в шаблоне как обычный HTML тег select, в который автоматически вставляются элементы списка, которые можно дополнительно настраивать.