Django - Динамическое заполнение вариантов выбора поля CharField полями некоторых других моделей: Модели еще не загружены RegistryError

Всем доброго дня, надеюсь, у вас все хорошо.

Сразу к делу, допустим, у нас есть модели anpp w:

    from django.apps import apps
    from django.db import models

    class A(models.Model):
        # A lot of fields go here
    
    class B(models.Model):
        # A lot of fields go here
    
    # And some more models ...
    
    class ModelChoices(models.TextChoices):
        A = 'A'
        B = 'B'
        ...
    
    class Filterset(models.Model):
        model = models.CharField(max_length=32, choices=ModelChoices.choices)
        attribute = models.CharField(max_length=32, choices=auto_generate_attributes().choices)
    
        def auto_generate_attributes():

            all_attributes = set()
            for model_name in ModelChoices.values:
                ModelClass = apps.get_model(model_name)
                model_fields = ModelClass._meta.get_fields()
                model_attributes = [(attr.name, attr.name) for attr in model_fields]
                all_attributes.update(model_attributes),
            Attributes = models.TextChoices(
                'Attributes',
                list(all_attributes),
            )
            return Attributes

Теперь вы, вероятно, задаетесь вопросом, в чем смысл этой таблицы. Вкратце, я буду использовать ее в M2M отношениях с другой моделью, чтобы пользователь мог фильтровать значения разных моделей одновременно и возвращать список FK объектов, которые все модели разделяют (звучит абстрактно, но поверьте мне). Но другие модели все еще находятся в процессе разработки и будут редактировать/создавать новые поля со временем, вот почему я должен генерировать их динамически вместо жесткого кодирования.

Проблема заключается в попытке заставить классы моделей при инициализации всплывать варианты выбора модели Filterset, потому что Django возвращает эту ошибку:

# ...Rest of the tracestack goes here...
ModelClass = apps.get_model(model_name)
  File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 19
8, in get_model
    self.check_models_ready()
  File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 14
0, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

Я пробовал многие из решений, предложенных в вопросах StackOverflow такого же характера:

  1. Importing the models explicitly instead of using get_model, returns the same error.
  2. Using import django followed by django.setup() at the top of the file, returns RuntimeError: populate() isnt reentrant, which doesn't say much.
  3. Creating the attributes list in another file outside of models, returns the same error whenever you call the function.

Я видел, как люди пытаются переписать метод ready() класса AppConfig для приложения, но не знаю, как перевести это на мою конкретную проблему. Есть ли на самом деле способ, чтобы это успешно генерировало поля при инициализации и создавало миграцию со всеми вариантами выбора?

Заранее благодарю вас за любую помощь. Я тщательно обыскал интернет, но ничего не нашел, поэтому чувствую себя настолько беспомощным, насколько это возможно.

Вернуться на верх