Ora più utenti possono avere lo stesso tema e li setto con una Inline

my-merge-progressivo1
Davide Borgonovo 2022-04-28 18:34:28 +02:00
parent b8a160f746
commit 7baffaf490
4 changed files with 72 additions and 16 deletions

View File

@ -1,13 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from admin_interface.compat import gettext_lazy as _
from admin_interface.models import Theme
from django.contrib.auth import models as auth_models
from django.contrib import admin from django.contrib import admin
from django.contrib.auth import models as auth_models
from admin_interface.compat import gettext_lazy as _
from admin_interface.models import Theme, UserTheme
class UserInline(admin.TabularInline):
model = UserTheme
extra = 0
autocomplete_fields = ('user', )
class ThemeAdmin(admin.ModelAdmin): class ThemeAdmin(admin.ModelAdmin):
inlines = [UserInline, ]
list_display = ( list_display = (
"name", "name",
@ -136,7 +143,8 @@ class ThemeAdmin(admin.ModelAdmin):
), ),
}, },
), ),
(_("Navigation Bar"), {"classes": ("wide",), "fields": ("foldable_apps",)}), (_("Navigation Bar"), {"classes": (
"wide",), "fields": ("foldable_apps",)}),
( (
_("Related Modal"), _("Related Modal"),
{ {
@ -174,10 +182,6 @@ class ThemeAdmin(admin.ModelAdmin):
_("Recent Actions"), _("Recent Actions"),
{"classes": ("wide",), "fields": ("recent_actions_visible",)}, {"classes": ("wide",), "fields": ("recent_actions_visible",)},
), ),
(
_("Users theme"),
{"classes": ("wide",), "fields": ("user",)},
),
) )
save_on_top = True save_on_top = True

View File

@ -7,7 +7,7 @@ def get_active_theme(request):
objs_active_count = len(objs_active_ls) objs_active_count = len(objs_active_ls)
if objs_active_count == 0: if objs_active_count == 0:
obj = objs_manager.all().first() obj = objs_manager.first()
if obj: if obj:
obj.set_active() obj.set_active()
else: else:

View File

@ -0,0 +1,37 @@
# Generated by Django 3.2.13 on 2022-04-28 16:03
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('admin_interface', '0026_add_user_option'),
]
operations = [
migrations.RemoveField(
model_name='theme',
name='user',
),
migrations.CreateModel(
name='UserTheme',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('theme', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='admin_interface.theme')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, unique=True)),
],
options={
'verbose_name': 'Users theme',
'verbose_name_plural': 'Users themes',
},
),
migrations.AddField(
model_name='theme',
name='users',
field=models.ManyToManyField(through='admin_interface.UserTheme', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -14,6 +14,17 @@ from admin_interface.compat import FileExtensionValidator, force_str
from admin_interface.compat import gettext_lazy as _ from admin_interface.compat import gettext_lazy as _
@python_2_unicode_compatible
class UserTheme(models.Model):
class Meta:
verbose_name = 'Users theme'
verbose_name_plural = 'Users themes'
user = models.ForeignKey(
'auth.User', on_delete=models.CASCADE, null=True, unique=True)
theme = models.ForeignKey('Theme', on_delete=models.CASCADE)
@python_2_unicode_compatible @python_2_unicode_compatible
class Theme(models.Model): class Theme(models.Model):
@staticmethod @staticmethod
@ -62,7 +73,7 @@ class Theme(models.Model):
elif objs_active_count > 1: elif objs_active_count > 1:
for frame_record in inspect.stack(): for frame_record in inspect.stack():
if frame_record[3]=='get_response': if frame_record[3] == 'get_response':
request = frame_record[0].f_locals['request'] request = frame_record[0].f_locals['request']
user = request.user user = request.user
break break
@ -83,7 +94,7 @@ class Theme(models.Model):
active = models.BooleanField(default=True, verbose_name=_("active")) active = models.BooleanField(default=True, verbose_name=_("active"))
demo = models.BooleanField(default=False, verbose_name=_("is demo")) demo = models.BooleanField(default=False, verbose_name=_("is demo"))
user = models.ForeignKey('auth.User', on_delete=models.CASCADE, null=True, blank=True, verbose_name=_("active for user")) users = models.ManyToManyField('auth.User', through=UserTheme)
title = models.CharField( title = models.CharField(
max_length=50, max_length=50,
@ -98,7 +109,8 @@ class Theme(models.Model):
max_length=10, max_length=10,
verbose_name=_("color"), verbose_name=_("color"),
) )
title_visible = models.BooleanField(default=True, verbose_name=_("visible")) title_visible = models.BooleanField(
default=True, verbose_name=_("visible"))
logo = models.FileField( logo = models.FileField(
upload_to="admin-interface/logo/", upload_to="admin-interface/logo/",
@ -138,7 +150,8 @@ class Theme(models.Model):
verbose_name=_("favicon"), verbose_name=_("favicon"),
) )
env_name = models.CharField(blank=True, max_length=50, verbose_name=_("name")) env_name = models.CharField(
blank=True, max_length=50, verbose_name=_("name"))
env_color = ColorField( env_color = ColorField(
blank=True, blank=True,
default="#E74C3C", default="#E74C3C",
@ -309,7 +322,8 @@ class Theme(models.Model):
verbose_name=_("text color"), verbose_name=_("text color"),
) )
related_modal_active = models.BooleanField(default=True, verbose_name=_("active")) related_modal_active = models.BooleanField(
default=True, verbose_name=_("active"))
related_modal_background_color = ColorField( related_modal_background_color = ColorField(
blank=True, blank=True,
default="#000000", default="#000000",
@ -376,7 +390,8 @@ class Theme(models.Model):
default=True, verbose_name=_("sticky position") default=True, verbose_name=_("sticky position")
) )
foldable_apps = models.BooleanField(default=True, verbose_name=_("foldable apps")) foldable_apps = models.BooleanField(
default=True, verbose_name=_("foldable apps"))
recent_actions_visible = models.BooleanField( recent_actions_visible = models.BooleanField(
default=True, verbose_name=_("visible") default=True, verbose_name=_("visible")