Связанные поля не фильтруются в наборе форм (при использовании библиотеки 'django-formset')

Я пытаюсь использовать библиотеку 'django-formset' для фильтрации выпадающего списка (объекты ForeignKey) при выборе элемента в связанном выпадающем списке (связанные объекты ForeignKey). Вроде бы все сделал по инструкции, но все равно данные во втором выпадающем списке не фильтруются. Может у кого-то есть опыт использования этой библиотеки с formset?

Что я сделал:

Модель

class TypeCar(models.Model):
    title = models.CharField(max_length=20)

class Car(models.Model):
    reg_mark = models.CharField(max_length=10)
    type_car = models.ForeignKey(
        'TypeCar',
        ...
    )

class Order(models.Model):
    car = models.ForeignKey(
        Car,
        ...
    )
    type_car = models.ForeignKey(
        TypeCar,
        ...
    )

Form (FormSet):

from formset.widgets import Selectize

class OrderCloseForm(forms.ModelForm):
    type_car = forms.ModelChoiceField(
        label="Type_car",
        queryset=TypeCar.objects.all(),
        widget=Selectize(
            search_lookup='name__icontains',
            placeholder="First, select Type car"
        ),
        required=False,
    )

    car = forms.ModelChoiceField(
        label="Car",
        queryset=Car.objects.all(),
        widget=Selectize(
            search_lookup=['title__icontains'],
            filter_by={'type_car': 'type_car__id'},
            placeholder="Then, select a Car"
        ),
        required=False,
    )

    class Meta:
        model = Order
        fields = (
            'type_car',
            'car',
        )

Набор форм отображает уже существующие объекты, в которых необходимо сделать выбор из указанных полей

OrderCloseFormSet = modelformset_factory(
    Order,
    form=OrderCloseForm,
    extra=0,
    can_delete=False,
)

Шаблон

<head>
  <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
  <link href="{% static 'formset/css/bootstrap5-extra.css' %}" rel="stylesheet">
  <link href="{% static 'formset/css/collections.css' %}" rel="stylesheet">
  <script type="module" src="{% static 'formset/js/django-formset.js' %}"></script>
</head>

<django-formset endpoint="{{ request.path }}" csrf-token="{{ csrf_token }}">
  {{ formset.management_form }}
  {{ formset.non_form_errors.as_ul }}
    {% for form in formset %}
      {% for field in form %}
        {{ field }}
      {% endfor %}
    {% endfor %}
</django-formset>

В вашей модели OrderCloseForm параметр search_lookup для поля type_car установлен на использование 'name__icontains', но в вашей модели TypeCar нет поля name, вместо него есть поле title name.

Исправьте его следующим образом:

widget=Selectize(
    search_lookup='title__icontains',  # Corrected from 'name__icontains'
    placeholder="First, select Type car"
),

Проверьте, решит ли это вашу проблему.

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