Динамическое поле выбора
Я работаю на Django 5.1.1. У меня есть форма IngredientFormSet
для IngredientForm(forms.Form)
. В форме есть поле выбора, как показано в фрагменте ниже. Количество ингредиентов в IngredientModel
составляет несколько тысяч. JS-библиотека select2
была использована в пользовательском интерфейсе, чтобы пользователь мог вводить текст в это поле, а select2
фильтровал названия с помощью Ajax-вызова.
Теперь, когда я отправляю форму, я получаю ошибку, что id названия ингредиента не является частью выбора (как choices=[]
), что ожидаемо, но очевидно, что это не работает для моего случая.
Я хочу обновить IngredientForm.__init__(self, *args, **kwargs)
таким образом, чтобы при любом идентификаторе ингредиента, который я получу в kwargs, я запрашивал, существует ли ингредиент с таким идентификатором в таблице, и если да, то добавлял это единственное значение в choices.
class IngredientForm(forms.Form):
ingredient = forms.ChoiceField(
label='Ingredient name',
required=True,
choices=[],
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
form_ingredient_id = ? # how to get hold of value of option here?
if IngredientModel.objects.filter(id=form_ingredient_id).exists():
self.fields['ingredient'].choices = [(form_ingredient_id, form_ingredient_id)]
Итак, как мне получить ingredient_id, который select2 поместил в поле выбора формы? Обратите внимание, что при инициализации набора форм я использую пользовательский префикс.