1
0
Fork 0
mirror of https://github.com/Findus23/RPGnotes.git synced 2024-09-19 15:43:45 +02:00
RPGnotes/characters/models.py

52 lines
1.9 KiB
Python

from django.core.exceptions import ValidationError
from django.core.validators import MinLengthValidator
from django.db import models
from django.urls import reverse
from sorl.thumbnail import ImageField
from common.models import NameSlugModel, DescriptionModel, HistoryModel
from locations.models import Location
from rpg_notes.settings import AUTH_USER_MODEL
from utils.colors import get_random_color, is_bright_color
from utils.random_filename import get_file_path
def validate_color_hex(value: str):
if not value.startswith("#"):
raise ValidationError("color hex has to start with a #")
class Character(NameSlugModel, DescriptionModel, HistoryModel):
subtitle = models.CharField(max_length=100, blank=True)
player = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.PROTECT, blank=True, null=True,
related_name="characters")
# faction = models.ForeignKey(Faction, on_delete=models.PROTECT, blank=True, null=True)
location = models.ForeignKey(Location, on_delete=models.PROTECT, blank=True, null=True)
color = models.CharField(max_length=7, default=get_random_color, validators=[
MinLengthValidator(7),
validate_color_hex
])
token_image = ImageField(upload_to=get_file_path, blank=True, null=True)
large_image = ImageField(upload_to=get_file_path, blank=True, null=True)
class Meta:
ordering = ["name"]
def get_absolute_url(self):
return reverse('characterdetail', args=[self.slug])
def initials(self):
return "".join([word[0] for word in self.name.split()][:2]).upper()
def text_color(self):
return "black" if is_bright_color(self.color) else "white"
def larger_image(self):
if self.large_image:
return self.large_image
return self.token_image
def smaller_image(self):
if self.token_image:
return self.token_image
return self.larger_image