2022-10-29 00:32:18 +02:00
|
|
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
|
|
from django.db import models
|
|
|
|
from django_extensions.db.models import TimeStampedModel
|
|
|
|
|
2022-10-30 09:44:28 +01:00
|
|
|
from common.models import DocumentedModel, UniquelyNamedModel
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
|
2022-10-30 09:44:28 +01:00
|
|
|
class Path(DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model):
|
2022-10-29 00:32:18 +02:00
|
|
|
profile = models.ForeignKey(
|
|
|
|
"character.Profile",
|
|
|
|
on_delete=models.CASCADE,
|
|
|
|
related_name="paths",
|
|
|
|
blank=True,
|
|
|
|
null=True,
|
2022-10-30 11:09:46 +01:00
|
|
|
verbose_name="profil",
|
2022-10-29 00:32:18 +02:00
|
|
|
)
|
|
|
|
race = models.ForeignKey(
|
|
|
|
"character.Race",
|
|
|
|
on_delete=models.CASCADE,
|
|
|
|
related_name="paths",
|
|
|
|
blank=True,
|
|
|
|
null=True,
|
2022-10-30 11:09:46 +01:00
|
|
|
verbose_name="race",
|
2022-10-29 00:32:18 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
class Category(models.TextChoices):
|
2022-10-30 11:09:46 +01:00
|
|
|
PROFILE = "profile", "Profil"
|
2022-10-29 00:32:18 +02:00
|
|
|
RACE = "race", "Race"
|
|
|
|
PRESTIGE = "prestige", "Prestige"
|
2022-10-30 11:09:46 +01:00
|
|
|
CREATURE = "creature", "Créature"
|
2022-10-29 00:32:18 +02:00
|
|
|
|
2022-10-30 11:09:46 +01:00
|
|
|
category = models.CharField(
|
|
|
|
max_length=20, choices=Category.choices, verbose_name="catégorie"
|
|
|
|
)
|
|
|
|
notes = models.TextField(blank=True, verbose_name="notes")
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
verbose_name = "Voie"
|
|
|
|
verbose_name_plural = "Voies"
|
2022-10-29 00:32:18 +02:00
|
|
|
|
2022-10-30 16:33:28 +01:00
|
|
|
@property
|
|
|
|
def display_name(self) -> str:
|
|
|
|
to_remove = ["voie de la", "voie de l'", "voie du", "voie des", "voie de"]
|
|
|
|
display_name = self.name.lower()
|
|
|
|
for text in to_remove:
|
|
|
|
display_name = display_name.replace(text, "")
|
|
|
|
return display_name.strip().capitalize()
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
|
2022-10-30 09:44:28 +01:00
|
|
|
class Capability(DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model):
|
2022-10-30 11:09:46 +01:00
|
|
|
path = models.ForeignKey(
|
|
|
|
"character.Path", on_delete=models.CASCADE, verbose_name="voie"
|
|
|
|
)
|
2022-10-29 00:32:18 +02:00
|
|
|
rank = models.PositiveSmallIntegerField(
|
2022-10-30 11:09:46 +01:00
|
|
|
validators=[MinValueValidator(1), MaxValueValidator(5)], verbose_name="rang"
|
2022-10-29 00:32:18 +02:00
|
|
|
)
|
2022-10-30 11:09:46 +01:00
|
|
|
limited = models.BooleanField(
|
|
|
|
blank=True, null=False, default=False, verbose_name="limitée"
|
|
|
|
)
|
|
|
|
spell = models.BooleanField(
|
|
|
|
blank=True, null=False, default=False, verbose_name="sort"
|
|
|
|
)
|
|
|
|
description = models.TextField(verbose_name="description")
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
constraints = [models.UniqueConstraint("path", "rank", name="unique_path_rank")]
|
2022-10-30 11:09:46 +01:00
|
|
|
verbose_name = "Capacité"
|
|
|
|
verbose_name_plural = "Capacités"
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
|
2022-10-30 10:00:37 +01:00
|
|
|
class RacialCapabilityManager(models.Manager):
|
|
|
|
def get_by_natural_key(self, name: str, race_id: int):
|
|
|
|
return self.get(name=name, race_id=race_id)
|
|
|
|
|
|
|
|
|
|
|
|
class RacialCapability(DocumentedModel, TimeStampedModel, models.Model):
|
2022-10-30 11:09:46 +01:00
|
|
|
name = models.CharField(max_length=100, blank=False, null=False, verbose_name="nom")
|
|
|
|
race = models.ForeignKey(
|
|
|
|
"character.Race", on_delete=models.CASCADE, verbose_name="race"
|
|
|
|
)
|
|
|
|
description = models.TextField(verbose_name="description")
|
2022-10-29 00:32:18 +02:00
|
|
|
|
2022-10-30 10:00:37 +01:00
|
|
|
objects = RacialCapabilityManager()
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
class Meta:
|
2022-10-30 11:09:46 +01:00
|
|
|
verbose_name = "Capacité raciale"
|
|
|
|
verbose_name_plural = "Capacités raciales"
|
2022-10-30 10:00:37 +01:00
|
|
|
constraints = [models.UniqueConstraint("name", "race", name="unique_name_race")]
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return f"{self.name} ({self.race})"
|
|
|
|
|
|
|
|
def natural_key(self):
|
|
|
|
return (self.name, self.race_id)
|