Django динамическое изменение фильтров моделей
Мне нужно создать фильтр, который предлагает следующие категории фильтрации, основываясь на предыдущих. Например, если я выбрал option[0][1] в first_dispute, то я продолжу фильтрацию только по option[1][1] и option[2][1] во second1_dispute. Например, если я выбрал вариант[1][1] или вариант[2][1] в продолжении, то я не смогу выбрать ни один из вариантов во втором2_диспуте.
models.py
class FirstDispute(models.Model):
CHOICES=(
('1', '01 О заключении, изменении и расторжении договоров'),
('2', '02 О недействительности сделок'),
('3', '03 О неисполнении или ненадлежащем исполнении обязательств по договорам'),
...
)
value = models.CharField("Категория спора (подкатегория 1):", max_length=122, choices=CHOICES, default=CHOICES[0][1])
def __str__(self):
return self.value
class Card(models.Model):
PROCEEDING_CHOICES =(
('Административное', 'Административное'),
('Интеллектуальное', 'Интеллектуальное'),
('Экономическое', 'Экономическое'),
)
SECOND1_DISPUTE = (
('None', 'Выбирается при значения "Подкатегория 1" - "01 О заключении, изменении и расторжении договоров"'),
('01.01 о понуждении к заключению договора', '01.01 о понуждении к заключению договора'),
...
)
SECOND2_DISPUTE = (
('None', 'Выбирается при значения "Подкатегория 1" - "02 О недействительности сделок"'),
('02.01 о признании сделки недействительной', '02.01 о признании сделки недействительной'),
...
)
THIRD_DISPUTE = (
('None', 'Выбирается при значениях "Подкатегория 1" - "02 О недействительности сделок" и "Подкатегория 2" - "02.03 о признании торгов недействительными"'),
('02.03.01 о признании незаконными решения и (или) действия (бездействия) организации либо членов комиссии', '02.03.01 о признании незаконными решения и (или) действия (бездействия) организации либо членов комиссии'),
...
)
proceeding = models.CharField("Вид судопроизводства:", max_length=16, choices=PROCEEDING_CHOICES, default=PROCEEDING_CHOICES[0][1])
first_dispute = models.ManyToManyField(FirstDispute)
second1_dispute = models.CharField("Категория спора (подкатегория 2-1)", max_length=122, choices=SECOND1_DISPUTE, blank=True, null=True)
second2_dispute = models.CharField("Категория спора (подкатегория 2-2)", max_length=122, choices=SECOND2_DISPUTE, blank=True, null=True)
third_dispute = models.CharField("Категория спора (подкатегория 3)", max_length=122, choices=THIRD_DISPUTE, blank=True, null=True)
filters.py
class CardFilter(django_filters.FilterSet):
start_date = DateFilter(field_name="date", lookup_expr='gte', label="Дата вынесения с", widget=forms.DateInput(attrs={'class': 'form-control', 'style': 'width:400px'}))
end_date = DateFilter(field_name="date", lookup_expr='lte', label="по", widget=forms.TextInput(attrs={'class': 'form-control', 'style': 'width:400px'}))
proceeding = django_filters.MultipleChoiceFilter(choices=Card.PROCEEDING_CHOICES, label="Вид судопроизводства (выберите подходящее значение)", widget=forms.CheckboxSelectMultiple())
first_dispute = django_filters.MultipleChoiceFilter(choices=FirstDispute.CHOICES, label="Первая подкатегория спора (выберите подходящее значение)", widget=(forms.CheckboxSelectMultiple()))
second1_dispute = django_filters.MultipleChoiceFilter(choices=Card.SECOND1_DISPUTE, label="Вторая (1) подкатегория спора (выберите подходящее значение)", widget=(forms.SelectMultiple()))
second2_dispute = django_filters.MultipleChoiceFilter(choices=Card.SECOND2_DISPUTE, label="Вторая (2) подкатегория спора (выберите подходящее значение)", widget=(forms.CheckboxSelectMultiple()))
third_dispute = django_filters.MultipleChoiceFilter(choices=Card.THIRD_DISPUTE, label="Третья подкатегория спора (выберите подходящее значение)", widget=(forms.SelectMultiple()))
class Meta:
model = Card
fields = ['proceeding', 'first_dispute', 'start_date', 'end_date']