django-admin-interface/admin_interface/models.py

109 lines
4.6 KiB
Python

# -*- coding: utf-8 -*-
from django.core.files import File
from django.db import models
from django.db.models.signals import post_delete, post_save
from colorfield.fields import ColorField
import os
class Theme(models.Model):
@staticmethod
def post_migrate_handler(sender, **kwargs):
Theme.get_or_create_default_theme()
@staticmethod
def post_delete_handler(instance, **kwargs):
Theme.get_or_create_default_theme()
@staticmethod
def post_save_handler(instance, created, **kwargs):
instance.set_active(instance.active)
Theme.get_or_create_default_theme()
@staticmethod
def get_or_create_default_theme():
obj_active = (True if len(list(Theme.objects.filter(active=True))) == 0 else False)
obj, obj_created = Theme.objects.get_or_create(pk='1', defaults={'active': obj_active})
if not obj.logo:
obj.set_default_logo()
if not obj_created and obj_active:
obj.set_active(True)
return (obj, obj_created, )
name = models.CharField(max_length=50, default='Django')
active = models.BooleanField(default=True)
title = models.CharField(max_length=50, default='Django administration', blank=True)
title_visible = models.BooleanField(default=True, verbose_name='visible')
logo = models.FileField(upload_to='admin-interface/logo/', blank=True)
logo_visible = models.BooleanField(default=True, verbose_name='visible')
css_header_background_color = ColorField(blank=True, default='#0C4B33', help_text='#0C4B33', verbose_name='background color')
css_header_title_color = ColorField(blank=True, default='#F5DD5D', help_text='#F5DD5D', verbose_name='title color')
css_header_text_color = ColorField(blank=True, default='#44B78B', help_text='#44B78B', verbose_name='text color')
css_header_link_color = ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', verbose_name='link color')
css_header_link_hover_color = ColorField(blank=True, default='#C9F0DD', help_text='#C9F0DD', verbose_name='link hover color')
css_module_background_color = ColorField(blank=True, default='#44B78B', help_text='#44B78B', verbose_name='background color')
css_module_text_color = ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', verbose_name='text color')
css_module_link_color = ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', verbose_name='link color')
css_module_link_hover_color = ColorField(blank=True, default='#C9F0DD', help_text='#C9F0DD', verbose_name='link hover color')
css_module_rounded_corners = models.BooleanField(default=True, verbose_name='rounded corners')
css_generic_link_color = ColorField(blank=True, default='#0C3C26', help_text='#0C3C26', verbose_name='link color')
css_generic_link_hover_color = ColorField(blank=True, default='#156641', help_text='#156641', verbose_name='link hover color')
css_save_button_background_color = ColorField(blank=True, default='#0C4B33', help_text='#0C4B33', verbose_name='background color')
css_save_button_background_hover_color = ColorField(blank=True, default='#0C3C26', help_text='#0C3C26', verbose_name='background hover color')
css_save_button_text_color = ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', verbose_name='text color')
css_delete_button_background_color = ColorField(blank=True, default='#BA2121', help_text='#BA2121', verbose_name='background color')
css_delete_button_background_hover_color = ColorField(blank=True, default='#A41515', help_text='#A41515', verbose_name='background hover color')
css_delete_button_text_color = ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', verbose_name='text color')
css = models.TextField(blank=True)
list_filter_dropdown = models.BooleanField(default=False)
def set_active(self, value):
if value:
Theme.objects.exclude(pk=self.pk).update(active=False)
Theme.objects.filter(pk=self.pk).update(active=True)
else:
Theme.objects.filter(pk=self.pk).update(active=False)
def set_default_logo(self):
logo_path = os.path.normpath(os.path.dirname(__file__) + '/data/logo-django.svg')
logo_file = open(logo_path)
self.logo = File(logo_file)
self.save()
logo_file.close()
class Meta:
app_label = 'admin_interface'
verbose_name = 'Theme'
verbose_name_plural = 'Themes'
def __unicode__(self):
return unicode(u'%s' % (self.name, ))
post_delete.connect(Theme.post_delete_handler, sender=Theme)
post_save.connect(Theme.post_save_handler, sender=Theme)