#!/usr/bin/env python # -*- coding: utf-8 -*- from django.conf import settings from django.db import ProgrammingError from django.db import connection def is_tenants_mode(): """ 判断是否为租户模式 :return: """ return hasattr(connection, 'tenant') and connection.tenant.schema_name # ================================================= # # ******************** 初始化 ******************** # # ================================================= # def _get_all_dictionary(): from dvadmin.system.models import Dictionary queryset = Dictionary.objects.filter(status=True, is_value=False) data = [] for instance in queryset: data.append({ "id": instance.id, "value": instance.value, "children": list(Dictionary.objects.filter(parent=instance.id).filter(status=1). values('label', 'value', 'type', 'color')) }) return {ele.get("value"): ele for ele in data} def _get_all_system_config(): data = {} from dvadmin.system.models import SystemConfig system_config_obj = SystemConfig.objects.filter(status=True, parent_id__isnull=False).values( 'parent__key', 'key', 'value', 'form_item_type').order_by('sort') for system_config in system_config_obj: data[f"{system_config.get('parent__key')}.{system_config.get('key')}"] = system_config.get('value') or '' return data def init_dictionary(schema_name=None): """ 初始化字典配置 :return: """ try: if is_tenants_mode(): from django_tenants.utils import tenant_context for tenant in get_tenant_model().objects.filter(schema_name=schema_name): with tenant_context(tenant): settings.DICTIONARY_CONFIG[connection.tenant.schema_name] = _get_all_dictionary() else: settings.DICTIONARY_CONFIG = _get_all_dictionary() print("初始化字典配置完成") except ProgrammingError as e: print("请先进行数据库迁移!") return def init_system_config(): """ 初始化系统配置 :param name: :return: """ try: if is_tenants_mode(): from django_tenants.utils import tenant_context for tenant in get_tenant_model().objects.filter(schema_name=schema_name): with tenant_context(tenant): settings.SYSTEM_CONFIG[connection.tenant.schema_name] = _get_all_system_config() else: settings.SYSTEM_CONFIG = _get_all_system_config() print("初始化系统配置完成") except ProgrammingError as e: print("请先进行数据库迁移!") return def refresh_dictionary(): """ 刷新字典配置 :return: """ if is_tenants_mode(): with schema_context(connection.tenant.schema_name): settings.DICTIONARY_CONFIG[connection.tenant.schema_name] = _get_all_dictionary() else: settings.DICTIONARY_CONFIG = _get_all_dictionary() def refresh_system_config(): """ 刷新系统配置 :return: """ if is_tenants_mode(): with schema_context(connection.tenant.schema_name): settings.SYSTEM_CONFIG[connection.tenant.schema_name] = _get_all_system_config() else: settings.SYSTEM_CONFIG = _get_all_system_config() # ================================================= # # ******************** 字典管理 ******************** # # ================================================= # def get_dictionary_config(schema_name=None): """ 获取字典所有配置 :param schema_name: 对应字典配置的租户schema_name值 :return: """ if is_tenants_mode(): dictionary_config = settings.DICTIONARY_CONFIG[schema_name or connection.tenant.schema_name] else: dictionary_config = settings.DICTIONARY_CONFIG return dictionary_config or {} def get_dictionary_values(key, schema_name=None): """ 获取字典数据数组 :param key: 对应字典配置的key值(字典编号) :param schema_name: 对应字典配置的租户schema_name值 :return: """ dictionary_config = get_dictionary_config(schema_name) return dictionary_config.get(key) def get_dictionary_label(key, name, schema_name=None): """ 获取获取字典label值 :param key: 字典管理中的key值(字典编号) :param name: 对应字典配置的value值 :param schema_name: 对应字典配置的租户schema_name值 :return: """ children = get_dictionary_values(key, schema_name) or [] for ele in children: if ele.get("value") == str(name): return ele.get("label") return "" # ================================================= # # ******************** 系统配置 ******************** # # ================================================= # def get_system_config(schema_name=None): """ 获取系统配置中所有配置 1.只传父级的key,返回全部子级,{ "父级key.子级key" : "值" } 2."父级key.子级key",返回子级值 :param schema_name: 对应字典配置的租户schema_name值 :return: """ if is_tenants_mode(): dictionary_config = settings.SYSTEM_CONFIG[schema_name or connection.tenant.schema_name] else: dictionary_config = settings.SYSTEM_CONFIG return dictionary_config or {} def get_system_config_values(key, schema_name=None): """ 获取系统配置数据数组 :param key: 对应系统配置的key值(字典编号) :param schema_name: 对应系统配置的租户schema_name值 :return: """ system_config = get_system_config(schema_name) return system_config.get(key) def get_system_config_label(key, name, schema_name=None): """ 获取获取系统配置label值 :param key: 系统配置中的key值(字典编号) :param name: 对应系统配置的value值 :param schema_name: 对应系统配置的租户schema_name值 :return: """ children = get_system_config_values(key, schema_name) or [] for ele in children: if ele.get("value") == str(name): return ele.get("label") return ""