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 -*-
|
||||
|
||||
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.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):
|
||||
inlines = [UserInline, ]
|
||||
|
||||
list_display = (
|
||||
"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"),
|
||||
{
|
||||
|
|
@ -174,10 +182,6 @@ class ThemeAdmin(admin.ModelAdmin):
|
|||
_("Recent Actions"),
|
||||
{"classes": ("wide",), "fields": ("recent_actions_visible",)},
|
||||
),
|
||||
(
|
||||
_("Users theme"),
|
||||
{"classes": ("wide",), "fields": ("user",)},
|
||||
),
|
||||
)
|
||||
|
||||
save_on_top = True
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ def get_active_theme(request):
|
|||
objs_active_count = len(objs_active_ls)
|
||||
|
||||
if objs_active_count == 0:
|
||||
obj = objs_manager.all().first()
|
||||
obj = objs_manager.first()
|
||||
if obj:
|
||||
obj.set_active()
|
||||
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 _
|
||||
|
||||
|
||||
@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
|
||||
class Theme(models.Model):
|
||||
@staticmethod
|
||||
|
|
@ -62,7 +73,7 @@ class Theme(models.Model):
|
|||
|
||||
elif objs_active_count > 1:
|
||||
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']
|
||||
user = request.user
|
||||
break
|
||||
|
|
@ -83,7 +94,7 @@ class Theme(models.Model):
|
|||
active = models.BooleanField(default=True, verbose_name=_("active"))
|
||||
|
||||
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(
|
||||
max_length=50,
|
||||
|
|
@ -98,7 +109,8 @@ class Theme(models.Model):
|
|||
max_length=10,
|
||||
verbose_name=_("color"),
|
||||
)
|
||||
title_visible = models.BooleanField(default=True, verbose_name=_("visible"))
|
||||
title_visible = models.BooleanField(
|
||||
default=True, verbose_name=_("visible"))
|
||||
|
||||
logo = models.FileField(
|
||||
upload_to="admin-interface/logo/",
|
||||
|
|
@ -138,7 +150,8 @@ class Theme(models.Model):
|
|||
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(
|
||||
blank=True,
|
||||
default="#E74C3C",
|
||||
|
|
@ -309,7 +322,8 @@ class Theme(models.Model):
|
|||
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(
|
||||
blank=True,
|
||||
default="#000000",
|
||||
|
|
@ -376,7 +390,8 @@ class Theme(models.Model):
|
|||
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(
|
||||
default=True, verbose_name=_("visible")
|
||||
|
|
|
|||
Loading…
Reference in New Issue