From 05a32711b5f5e0f34a2a40c5a41b8065759c959c Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 16 Jun 2025 14:06:23 +0930 Subject: [PATCH] feat(settings): Change model to inherit from `CenturionModel` for UserSettings model ref: #833 #836 --- ...rsettings_default_organization_and_more.py | 38 ++++++ app/settings/models/user_settings.py | 122 +++++++----------- 2 files changed, 83 insertions(+), 77 deletions(-) create mode 100644 app/settings/migrations/0015_alter_usersettings_default_organization_and_more.py diff --git a/app/settings/migrations/0015_alter_usersettings_default_organization_and_more.py b/app/settings/migrations/0015_alter_usersettings_default_organization_and_more.py new file mode 100644 index 00000000..e87ba451 --- /dev/null +++ b/app/settings/migrations/0015_alter_usersettings_default_organization_and_more.py @@ -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", + ), + ), + ] diff --git a/app/settings/models/user_settings.py b/app/settings/models/user_settings.py index fc076b8a..be4b6dc5 100644 --- a/app/settings/models/user_settings.py +++ b/app/settings/models/user_settings.py @@ -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)