Динамическое поле выбора

Я работаю на 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 поместил в поле выбора формы? Обратите внимание, что при инициализации набора форм я использую пользовательский префикс.

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