2
0
Эх сурвалжийг харах

Implement dynamic db_table setting

Vince Salvino 2 жил өмнө
parent
commit
9b10aafcd8

+ 2 - 2
coderedcms/apps.py

@@ -1,8 +1,8 @@
 from django.apps import AppConfig
 
 
-class CoderedcmsConfig(AppConfig):
-    name = 'coderedcms'
+class WagtailcrxConfig(AppConfig):
+    name = 'wagtailcrx'
     verbose_name = 'Wagtail CRX'
     # TODO: At some point in the future, change this to BigAutoField and create
     # the corresponding migration for concrete models in coderedcms.

+ 11 - 0
coderedcms/models/page_models.py

@@ -106,6 +106,17 @@ def get_page_models():
 class CoderedPageMeta(PageBase):
     def __init__(cls, name, bases, dct):
         super().__init__(name, bases, dct)
+        # Copy of how django generates `db_table`, for compatibility with
+        # renaming `coderedcms` app to `wagtailcrx`.
+        if crx_settings.CRX_DB_PREFIX:
+            from django.db import connection
+            from django.db.backends.utils import truncate_name
+            cls.db_table = "%s_%s" % (crx_settings.CRX_DB_PREFIX, cls.model_name)
+            cls.db_table = truncate_name(
+                cls.db_table, connection.ops.max_name_length()
+            )
+
+        # Append to our registry of known models derived from CoderedPage.
         if not cls._meta.abstract:
             CODERED_PAGE_MODELS.append(cls)
 

+ 20 - 18
coderedcms/settings.py

@@ -5,21 +5,11 @@ import bootstrap4.bootstrap as bootstrap
 
 class _DefaultSettings:
 
-    CRX_PROTECTED_MEDIA_URL = '/protected/'
-    CRX_PROTECTED_MEDIA_ROOT = os.path.join(settings.BASE_DIR, 'protected')
-    CRX_PROTECTED_MEDIA_UPLOAD_WHITELIST = []
-    CRX_PROTECTED_MEDIA_UPLOAD_BLACKLIST = [
-        '.app',
-        '.bat',
-        '.exe',
-        '.jar',
-        '.php',
-        '.pl',
-        '.ps1',
-        '.py',
-        '.rb',
-        '.sh',
-    ]
+    CRX_BANNER = None
+    CRX_BANNER_BACKGROUND = '#f00'
+    CRX_BANNER_TEXT_COLOR = '#fff'
+
+    CRX_DB_PREFIX = None
 
     CRX_FRONTEND_BTN_SIZE_DEFAULT = ''
     CRX_FRONTEND_BTN_SIZE_CHOICES = [
@@ -176,9 +166,21 @@ class _DefaultSettings:
         ],
     }
 
-    CRX_BANNER = None
-    CRX_BANNER_BACKGROUND = '#f00'
-    CRX_BANNER_TEXT_COLOR = '#fff'
+    CRX_PROTECTED_MEDIA_URL = '/protected/'
+    CRX_PROTECTED_MEDIA_ROOT = os.path.join(settings.BASE_DIR, 'protected')
+    CRX_PROTECTED_MEDIA_UPLOAD_WHITELIST = []
+    CRX_PROTECTED_MEDIA_UPLOAD_BLACKLIST = [
+        '.app',
+        '.bat',
+        '.exe',
+        '.jar',
+        '.php',
+        '.pl',
+        '.ps1',
+        '.py',
+        '.rb',
+        '.sh',
+    ]
 
     def __getattribute__(self, attr: str):
         # First load from Django settings.