From dfc7914d3d2cdd0f9a5d1931888789a4f786cf96 Mon Sep 17 00:00:00 2001 From: Xuan Loi Date: Thu, 2 Apr 2026 14:35:38 +0700 Subject: [PATCH] changes --- api/__pycache__/settings.cpython-312.pyc | Bin 3398 -> 3394 bytes app/__pycache__/email.cpython-312.pyc | Bin 6857 -> 6857 bytes app/__pycache__/models.cpython-312.pyc | Bin 133743 -> 134830 bytes app/migrations/0011_webadmin_setting.py | 35 +++++++++++++++++++++++ app/models.py | 19 ++++++++++++ 5 files changed, 54 insertions(+) create mode 100644 app/migrations/0011_webadmin_setting.py diff --git a/api/__pycache__/settings.cpython-312.pyc b/api/__pycache__/settings.cpython-312.pyc index 81285aaf8650744452fae4aed29301ca73e107bb..83830046600970e1d44ce778e05ce27404a3a5d4 100644 GIT binary patch delta 135 zcmX>mbx4Z$G%qg~0}%M!KATxMk$0IUXB2M=XB1xwS2{xqX9_ov4x%?H?TGc&qPp2O|V$T#^3cOsB<kbxex)G%qg~0}y;Vdp0wFBJVOymMGp7mMFdy&UA(pmJ}`^$-Rg%lQD&74of;? z6n_eDlt2n!lwb<~#52>Gcs1NZxG+1cA498bA)6eBLH#s B57htw diff --git a/app/__pycache__/models.cpython-312.pyc b/app/__pycache__/models.cpython-312.pyc index e22af44497b57f00a47d72fdb0028d5888cfd2a9..99498297b15725f61714ce6fdee6b003be23d1e3 100644 GIT binary patch delta 7259 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 diff --git a/app/migrations/0011_webadmin_setting.py b/app/migrations/0011_webadmin_setting.py new file mode 100644 index 00000000..f8538e67 --- /dev/null +++ b/app/migrations/0011_webadmin_setting.py @@ -0,0 +1,35 @@ +# Generated by Django 5.1.7 on 2026-04-02 07:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0010_category_data_story_category'), + ] + + operations = [ + migrations.CreateModel( + name='Webadmin_Setting', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('category', models.CharField(max_length=100)), + ('classify', models.CharField(max_length=100)), + ('code', models.CharField(max_length=100)), + ('vi', models.TextField()), + ('en', models.TextField(null=True)), + ('image', models.TextField(null=True)), + ('icon', models.TextField(null=True)), + ('link', models.TextField(null=True)), + ('detail', models.JSONField(null=True)), + ('detail_en', models.JSONField(null=True)), + ('index', models.IntegerField(default=0, null=True)), + ('create_time', models.DateTimeField(auto_now_add=True, null=True)), + ], + options={ + 'db_table': 'webadmin_setting', + 'unique_together': {('category', 'classify', 'code')}, + }, + ), + ] diff --git a/app/models.py b/app/models.py index 9fa0a315..fcf0aae7 100644 --- a/app/models.py +++ b/app/models.py @@ -889,6 +889,25 @@ class Data_Story(models.Model): db_table = 'data_story' +class Webadmin_Setting(models.Model): + category = models.CharField(max_length=100, null=False) + classify = models.CharField(max_length=100, null=False) + code = models.CharField(max_length=100, null = False) + vi = models.TextField(null=False) + en = models.TextField(null=True) + image = models.TextField(null=True) + icon = models.TextField(null=True) + link = models.TextField(null=True) + detail = models.JSONField(null=True) + detail_en = models.JSONField(null=True) + index = models.IntegerField(null=True, default=0) + create_time = models.DateTimeField(null=True, auto_now_add=True) + + class Meta: + db_table = 'webadmin_setting' + unique_together = ('category', 'classify', 'code') + + class Company(AutoCodeModel): code_prefix = "CP" code_padding = 5