feat(settings): Change model to inherit from CenturionModel for UserSettings model

ref: #833 #836
This commit is contained in:
2025-06-16 14:06:23 +09:30
parent 1fe669e932
commit 05a32711b5
2 changed files with 83 additions and 77 deletions

View File

@ -0,0 +1,38 @@
# Generated by Django 5.1.9 on 2025-06-16 04:23
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("access", "0016_remove_tenant_slug_alter_tenant_manager_and_more"),
("settings", "0014_remove_externallink_is_global_and_more"),
]
operations = [
migrations.AlterField(
model_name="usersettings",
name="default_organization",
field=models.ForeignKey(
blank=True,
help_text="Users default Tenant",
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="access.tenant",
verbose_name="Default Tenant",
),
),
migrations.AlterField(
model_name="usersettings",
name="id",
field=models.AutoField(
help_text="ID of the item",
primary_key=True,
serialize=False,
unique=True,
verbose_name="ID",
),
),
]

View File

@ -1,17 +1,14 @@
import django
import zoneinfo
from rest_framework.reverse import reverse
from django.conf import settings
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from access.fields import *
from access.fields import AutoLastModifiedField
from access.models.tenant import Tenant
from core.lib.feature_not_used import FeatureNotUsed
from core.models.centurion import CenturionModel
sorted_timezones = sorted(zoneinfo.available_timezones())
@ -20,32 +17,16 @@ TIMEZONES = tuple(zip(
sorted_timezones
))
User = django.contrib.auth.get_user_model()
class UserSettings(
CenturionModel,
):
class UserSettingsCommonFields(models.Model):
_audit_enabled = False
class Meta:
abstract = True
_notes_enabled = False
id = models.AutoField(
blank=False,
help_text = 'ID for this user Setting',
primary_key=True,
unique=True,
verbose_name = 'ID'
)
slug = None
created = AutoCreatedField()
modified = AutoLastModifiedField()
class UserSettings(UserSettingsCommonFields):
class Meta:
@ -58,48 +39,52 @@ class UserSettings(UserSettingsCommonFields):
verbose_name_plural = 'User Settings'
model_notes = False
organization = None
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
blank = False,
help_text = 'User this Setting belongs to',
on_delete = models.CASCADE,
related_name='user_settings',
verbose_name = 'User'
)
class BrowserMode(models.IntegerChoices):
AUTO = 1, 'Auto'
DARK = 2, 'Dark'
LIGHT = 3, 'Light'
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
blank= False,
help_text = 'User this Setting belongs to',
on_delete=models.CASCADE,
related_name='user_settings',
verbose_name = 'User'
)
browser_mode = models.IntegerField(
blank = False,
choices = BrowserMode,
default = BrowserMode.AUTO,
help_text = "Set your web browser's mode",
verbose_name = 'Browser Mode',
)
)
default_organization = models.ForeignKey(
Tenant,
blank= True,
default = None,
blank = True,
help_text = 'Users default Tenant',
null = True,
on_delete=models.SET_DEFAULT,
on_delete = models.SET_NULL,
verbose_name = 'Default Tenant'
)
timezone = models.CharField(
default='UTC',
choices=TIMEZONES,
default = 'UTC',
choices = TIMEZONES,
help_text = 'What Timezone do you wish to have times displayed in',
max_length=32,
max_length = 32,
verbose_name = 'Your Timezone',
)
modified = AutoLastModifiedField()
page_layout: list = [
{
"name": "Details",
@ -122,40 +107,7 @@ class UserSettings(UserSettingsCommonFields):
},
]
def get_organization(self):
return self.default_organization
def get_url( self, request = None ) -> str:
model_name = str(self._meta.verbose_name.lower()).replace(' ', '_')
if request:
return reverse(f"v2:_api_v2_user_settings-detail", request=request, kwargs = { 'pk': self.pk } )
return reverse(f"v2:_api_v2_user_settings-detail", kwargs = { 'pk': self.pk } )
def get_url_kwargs_notes(self):
return FeatureNotUsed
@receiver(post_save, sender=User)
def new_user_callback(sender, **kwargs):
settings = UserSettings.objects.filter(user=kwargs['instance'])
if not settings.exists():
UserSettings.objects.create(user=kwargs['instance'])
# settings = UserSettings.objects.filter(user=context.user)
table_fields = []
def is_owner(self, user: int) -> bool:
@ -165,3 +117,19 @@ class UserSettings(UserSettingsCommonFields):
return True
return False
def get_organization(self):
return self.default_organization
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def new_user_callback(sender, **kwargs):
settings = UserSettings.objects.filter(user=kwargs['instance'])
if not settings.exists():
UserSettings.objects.create(user=kwargs['instance'])
# settings = UserSettings.objects.filter(user=context.user)