Definitions
Библиотека не поставляет продуктовые ключи. Django-приложение объявляет
категории и ключи в settings проекта вместе с
GLOBAL_CONFIG_ENCRYPTION_KEY.
Ключи держите в проектном StrEnum. Тот же член передавайте в
SettingDefinition, get_value() и set_value().
from enum import StrEnum
from django_gc import CategoryDefinition, SettingDefinition, SettingType
class SettingKey(StrEnum):
MAINTENANCE_ENABLED = 'maintenance-enabled'
GLOBAL_CONFIG_CATEGORIES = [
CategoryDefinition(id=1, code='platform', name='Platform'),
]
GLOBAL_CONFIG_DEFINITIONS = [
SettingDefinition(
key=SettingKey.MAINTENANCE_ENABLED,
description='Maintenance mode',
default_value=False,
value_type=SettingType.BOOLEAN,
category_id=1,
nullable=False,
is_read_only=False,
variables=None,
is_always_update=False,
),
]
Синхронизация
GlobalConfigInitializationService.initialize() выполняется на post_migrate приложения django_gc:
- создать отсутствующие категории (
bulk_create) - создать отсутствующие ключи с объявленным default
- обновить метаданные существующих ключей: description, тип, категория, nullable, read-only,
is_always_update - обновить
variablesтолько приis_always_updateдля choice-типов - не заменять рабочее
value - сохранить названия категорий, которые менял администратор
- запланировать один refresh кэша после commit
Новые ключи нельзя создать через save() или Admin. Они появляются только из definitions.