В Django Forms, как добавить фильтр в элемент управления SelectedMultiple? - PullRequest
0 голосов
/ 13 мая 2019

Я работаю с Django Forms.В моей модели у меня есть отношение ManyToMany между классом X и классом Y, и Django показывает очень раздражающий элемент управления MultipleChoice для редактирования этого отношения.Я хотел бы добавить фильтр, чтобы при редактировании объекта X пользователь мог фильтровать объекты Y по имени, в то время как он пишет имя, чтобы окончательно выбрать их

Некоторая идея о том, как это сделать в Django?

1 Ответ

0 голосов
/ 13 мая 2019

По умолчанию ManyToManyField в Django Model будет представлен ModelMultipleChoiceField в ModelForm, который сам использует виджет SelectMultiple. Этот виджет использует элемент браузера <select multiple="multiple"> по умолчанию, что приводит к «раздражающему» элементу множественного выбора.

Таким образом, чтобы заменить его, вы должны переопределить ModelMultipleChoiceField в вашей форме, чтобы передать ему свой собственный виджет (который будет иметь подкласс SelectMultiple и переопределить используемый шаблон):

my_field = forms.ModelMultipleChoiceField(queryset=Y.objects.all(), widget=MySelectMultiple)

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

Очень популярный модуль jquery на внешней стороне - select2 . Если вы хотите использовать его, есть несколько пакетов django, которые уже поддерживают его, популярными являются django-autocomplete-light и django-select2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...