You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

50 lines
1.6 KiB

from django.db import models
from django.utils.translation import gettext_lazy as _
# 1. Define choices globally so they can be reused
class StatusColorChoices(models.TextChoices):
RED = 'red', _('Red')
GREEN = 'green', _('Green')
BLUE = 'blue', _('Blue')
YELLOW = 'yellow', _('Yellow')
ORANGE = 'orange', _('Orange')
PURPLE = 'purple', _('Purple')
GRAY = 'gray', _('Gray')
# 2. Create the Abstract Mixin
class ColorPaletteMixin(models.Model):
"""
An abstract base class that provides color choice fields
and hex code properties to any model that inherits it.
"""
COLOR_PALETTE = {
'red': {'main': '#D33A3A', 'light': '#FBEBEB'},
'green': {'main': '#1DAC43', 'light': '#E8F7EC'},
'blue': {'main': '#5172E1', 'light': '#FAFBFC'},
'yellow': {'main': '#EDC130', 'light': '#FCF8EA'},
'orange': {'main': '#E67E22', 'light': '#FDF1E6'},
'purple': {'main': '#7C5CC4', 'light': '#F2EDFA'},
'gray': {'main': '#374151', 'light': '#EEEFF2'},
}
color = models.CharField(
max_length=20,
choices=StatusColorChoices.choices,
verbose_name=_('color'),
default=StatusColorChoices.GRAY
)
class Meta:
abstract = True # Tells Django NOT to create a database table for this class
@property
def color_hashes(self):
return self.COLOR_PALETTE.get(self.color, {'main': '#000000', 'light': '#FFFFFF'})
@property
def main_color_code(self):
return self.color_hashes['main']
@property
def light_color_code(self):
return self.color_hashes['light']