Ora più utenti possono avere lo stesso tema e li setto con una Inline
parent
b8a160f746
commit
7baffaf490
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue