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']
Вернуться на верх