diff --git a/django_kelove_setting/admin.py b/django_kelove_setting/admin.py index 333e244392173e88d017919efc99345adc733f98..2c2770cbce49467ff6bdfcf1e3302c127c7b8155 100644 --- a/django_kelove_setting/admin.py +++ b/django_kelove_setting/admin.py @@ -172,6 +172,7 @@ class SettingsModelAdmin(BaseSettingsModelAdmin): if not change: obj.created_user = user super().save_model(request, obj, form, change) + form.delete_cache() def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): title = context.get('title', '') diff --git a/django_kelove_setting/setting_forms.py b/django_kelove_setting/setting_forms.py index f735c7233df09964e867deee81094d3f7f5a11bf..f18d4ae86a51e43c77b421e119db35f38e64b2c9 100644 --- a/django_kelove_setting/setting_forms.py +++ b/django_kelove_setting/setting_forms.py @@ -6,6 +6,7 @@ At 1/24/21 11:44 AM import json from hashlib import md5 +from asgiref.sync import sync_to_async from django.db import ProgrammingError, OperationalError from django.forms.models import ModelForm, model_to_dict @@ -165,29 +166,32 @@ class Settings(ModelForm): data = {} return data + @classmethod + def get_from_initial(cls): + initial_data = {} + for key, val in cls.base_fields.items(): + if key == 'settings_val': + continue + try: + initial_data[key] = cls.get_initial(val) + except AttributeError: + pass + return initial_data + @classmethod def get(cls) -> dict: """ 获取配置 :return: """ + initial_data = cls.get_from_initial() cache_version = SETTINGS_CACHE_VERSION cache_key = cls.get_cache_key() cache_data = cache.get(key=cache_key, default=None, version=cache_version) if cache_data is not None: - return cache_data - data = cls.get_form_db() - initial_data = {} - for key, val in cls.base_fields.items(): - if key == 'settings_val': - continue - try: - initial_data[key] = cls.get_initial(val) - except AttributeError: - pass - cache_data = {**initial_data, **data} + return {**initial_data, **cache_data} + cache_data = {**initial_data, **cls.get_form_db()} cache.set(key=cache_key, value=cache_data, timeout=3600 * 24 * 365, version=cache_version) - return cache_data @classmethod @@ -201,6 +205,16 @@ class Settings(ModelForm): return cls.get().get(key, default) + @classmethod + @sync_to_async + def aget(cls): + return cls.get() + + @classmethod + async def aget_item(cls, key: str, default=None): + data = await cls.aget() + return data.get(key, default) + @classmethod def get_initial(cls, field): """ diff --git a/pyproject.toml b/pyproject.toml index 11632faec0929196ed633efad44342334d2b6a45..51e5252e3a9a7457ed22382092d243f4050a5bcd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "django-kelove-setting" -version = "2.0.4" +version = "2.0.5" description = "DJANGO 配置管理" @@ -30,11 +30,14 @@ classifiers = [ 'Intended Audience :: Developers', "Natural Language :: Chinese (Simplified)", "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Framework :: Django :: 3.1", + "Framework :: Django :: 3.2", + "Framework :: Django :: 4.0", + "Framework :: Django :: 4.1", ] packages = [