@shibanovan

Как динамически фильтровать field в форме?

Есть три модели
Контрагент
class Partner(models.Model):
    partner_name = models.CharField(max_length=30, verbose_name='Имя контрагента')


Договор
class Contract(models.Model):
    contract_name = models.CharField(max_length=30, verbose_name='Название')
    partner = models.ForeignKey(Partner, on_delete=models.CASCADE, verbose_name='Партнер')


Работа

class Work(models.Model):
    work_name = models.CharField(max_length=30, verbose_name='Наименование')
    contract = models.ForeignKey(Contract, on_delete=models.CASCADE, verbose_name='Договор')


Хочу при создании работы, при выборе в форме partner_name отображать только его договоры. Есть какой-либо выход кроме как использовать JS-Frontend ? Решали ли подобные задачи, как реализовывали?
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
neatsoft
@neatsoft
Life is too short for bad software
Эту функциональность можно реализовать с помощью перезагрузки формы с передачей выбранных значений через GET параметры, но гораздо проще и удобнее использовать Select2 / autocomplete_fields. Кроме фильтрации это решает ещё две проблемы: загрузка длинных списков и поиск элементов в таких списках.

Без js фильтрацию значений зависимых полей можно реализовать только с помощью многошаговой формы: форма с единственным полем Partner -> Submit -> форма со всеми остальными полями.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы