AttributeError: объект 'Settings' не имеет атрибута <класс, который я определил внутри settings.py> при импорте settings из conf

Я добавил enum в settings.py файл

class Syncs(Enum):
    A = 'a'
    B = 'b'

когда я пытаюсь использовать их в приложении, импортируя from django.conf import settings, оно выдает:

AttributeError: 'Settings' object has no attribute Syncs

с другой стороны, если я импортирую файл настроек напрямую, он работает

Я знаю, что это потому, что from django.conf import settings работает по-другому, поэтому это не работает. Есть ли какой-то рекомендуемый способ сделать это?

Пока есть:

class Syncs(Enum):
    A = 'a'
    B = 'b'

SYNCS = Syncs

In essence, the settings object is a lazy object that gets populate from the settings module. It will only populate with items that are written in uppercase (can be with punctuations like an underscore). Indeed, the source code that populates the items [GitHub] says:

for setting in dir(global_settings):
    if setting.isupper():
        setattr(self, setting, getattr(global_settings, setting))

Таким образом, он будет проверять, удовлетворяет ли параметр методу str.isupper() [Python-doc], если да, то он добавляется к объекту, иначе нет. Таким образом, вам нужно будет определить это во всех словах. Это объясняется тем, что параметры являются константами, а в Python принято писать константы в змеином регистре.

Вы можете определить перечисление как:

class SYNCS(Enum):
    A = 'a'
    B = 'b'

Но это заставляет меня задуматься, почему вы хотите определить перечисление в настройках, это немного "odd".

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