Так что я хочу создать django filters.FilterSet от django-filter module, но хочу динамически добавлять его атрибуты. Например, если я хотел бы добавить SubName
динамически:Django dynamic filterset
class UsersInfoFilter(filters.FilterSet):
Name=NumberFilter(lookup_type='gte')
def __new__(self):
self.SubName=NumberFilter(lookup_type='gte')
self.Meta.fields.append('SubName')
class Meta:
model = UsersInfo
fields = ['UserID', 'LanguageID', 'Name']
Проблема заключается в том, что FilterSet является метаклассом, что сразу же запускается после того, как класс был разобрался, так что нет нигде до этого момента, что элементы могут быть добавлены динамически ,
Я попытался поместить функцию в качестве параметра вокруг filters.FilterSet class UsersInfo(AddObjects(filters.FilterSet))
, который возвращает именно то, что проходит, но я не могу ссылаться на UsersInfoFilter
в этот момент, так как он еще не закончен.
Я также попытался сделать UsersInfoFilter
своим собственным базовым классом, а затем создать class RealUsersInfoFilter(UsersInfoFilter, filters.FilterSet)
в качестве моего фактического фильтра, но затем FilterSet просто выдает предупреждения об отсутствующих атрибутах, называемых полями.
Для классов в python не существует какой-либо функции-конструктора. Я предполагаю, что мне нужно делать магию с метаклассами, но я пробовал каждую комбинацию, о которой я могу думать, и я нахожусь в конце.
Вы должны добавить тег 'django-filter', чтобы максимизировать шансы получить ответ. –
Вы когда-нибудь находили для этого ответ? Я застрял на чем-то подобном. –
К сожалению, решение никогда не появлялось. – Dakusan