Как сделать авто-обновление не статичных choices для django_filters ChoiceField?

Для того чтобы реализовать авто-обновление не статичных choices для django_filters ChoiceField, вам потребуется создать свой фильтр, который будет обновлять список доступных значения поля в зависимости от условий.

В Django Filters, ChoiceField использует статичный список значений, определенный заранее. Однако, если вы хотите, чтобы значения в поле обновлялись динамически, вам нужно создать свой фильтр с использованием класса BaseType или NumberFilter вместо ChoiceFilter.

В первую очередь, вам нужно создать свой собственный фильтр, наследуемый от NumberFilter или BaseType, и реализовать метод get_filter_choices(self, field) в своем фильтре.

Вот пример класса фильтра:

from django_filters.filters import NumberFilter

class DynamicChoiceFilter(NumberFilter):
    def get_filter_choices(self, field):
        # ваш код для авто-обновления choices
        # вы можете выполнять запросы к базе данных или получать значения из какого-либо сервиса
        # здесь можно реализовать логику, которая будет возвращать динамические значения в зависимости от ваших требований

        return [
            ('value1', 'Label 1'),
            ('value2', 'Label 2'),
            ('value3', 'Label 3'),
            # ...
        ]

Теперь, когда у нас есть наш собственный фильтр, мы можем использовать его в качестве поля фильтрации в django_filters.FilterSet. Пример использования:

from django_filters import FilterSet
from .models import MyModel

class MyFilterSet(FilterSet):
    my_field = DynamicChoiceFilter(field_name='my_field')

    class Meta:
        model = MyModel
        fields = ['my_field']  # здесь вы можете указать другие поля для фильтрации

Обратите внимание, что мы указываем field_name в DynamicChoiceFilter, чтобы указать поле модели, для которого мы хотим создать фильтр.

Указав 'my_field' в fields в классе Meta FilterSet, мы можем использовать его в представлении или шаблоне для фильтрации данных.

Теперь, каждый раз, когда вы будете использовать этот фильтр, список значений для поля my_field будет обновляться автоматически в зависимости от вашей логики обновления. Вы можете настроить это, например, с помощью ajax-запросов к серверу или обращаясь к внешним сервисам для получения динамических значений.

Надеюсь, это поможет вам решить вашу задачу!