Add link to CO website

This commit is contained in:
Gabriel Augendre 2022-10-30 09:44:28 +01:00
parent e3522a9d61
commit 9471b8c70b
12 changed files with 107 additions and 9 deletions

View file

@ -8,6 +8,13 @@ class CapabilityAdmin(admin.ModelAdmin):
list_display = ["name", "path", "rank", "limited", "spell"] list_display = ["name", "path", "rank", "limited", "spell"]
list_filter = ["path", "path__profile", "path__race", "rank", "limited", "spell"] list_filter = ["path", "path__profile", "path__race", "rank", "limited", "spell"]
search_fields = ["name", "description"] search_fields = ["name", "description"]
fieldsets = [
(None, {"fields": ["name"]}),
("Path", {"fields": [("path", "rank")]}),
("Type", {"fields": [("limited", "spell")]}),
("Description", {"fields": ["description"]}),
("Documentation", {"fields": ["url"]}),
]
@admin.register(models.Path) @admin.register(models.Path)
@ -19,6 +26,7 @@ class PathAdmin(admin.ModelAdmin):
(None, {"fields": ["name"]}), (None, {"fields": ["name"]}),
("Related to", {"fields": ["category", ("profile", "race")]}), ("Related to", {"fields": ["category", ("profile", "race")]}),
("Notes", {"fields": ["notes"]}), ("Notes", {"fields": ["notes"]}),
("Documentation", {"fields": ["url"]}),
] ]
def related_to(self, instance: models.Path) -> str: def related_to(self, instance: models.Path) -> str:
@ -50,6 +58,11 @@ class ProfileAdmin(admin.ModelAdmin):
list_filter = ["life_dice", "magical_strength"] list_filter = ["life_dice", "magical_strength"]
search_fields = ["name"] search_fields = ["name"]
inlines = [PathInline] inlines = [PathInline]
fieldsets = [
(None, {"fields": ["name", ("magical_strength", "life_dice")]}),
("Notes", {"fields": ["notes"]}),
("Documentation", {"fields": ["url"]}),
]
class RacialCapabilityInline(admin.TabularInline): class RacialCapabilityInline(admin.TabularInline):

View file

@ -52,6 +52,7 @@ class Command(BaseCommand):
"path": path, "path": path,
"limited": limited, "limited": limited,
"spell": spell, "spell": spell,
"url": "https://www.co-drs.org/fr/jeu/capacites",
}, },
) )
self.stdout.write(self.style.SUCCESS(f"Created/updated cap {capability}")) self.stdout.write(self.style.SUCCESS(f"Created/updated cap {capability}"))

View file

@ -48,6 +48,7 @@ class Command(BaseCommand):
"profile": profile, "profile": profile,
"race": race, "race": race,
"notes": notes, "notes": notes,
"url": url,
}, },
) )
self.stdout.write(self.style.SUCCESS(f"Created/updated path {path}")) self.stdout.write(self.style.SUCCESS(f"Created/updated path {path}"))

View file

@ -32,6 +32,7 @@ class Command(BaseCommand):
"life_dice": dice, "life_dice": dice,
"magical_strength": magical_strength, "magical_strength": magical_strength,
"notes": notes, "notes": notes,
"url": url,
}, },
) )
self.stdout.write(self.style.SUCCESS(f"Created/updated profile {profile}")) self.stdout.write(self.style.SUCCESS(f"Created/updated profile {profile}"))

View file

@ -23,7 +23,7 @@ class Command(BaseCommand):
self.selenium.get(url) self.selenium.get(url)
name = self.selenium.find_element(By.TAG_NAME, "h1").text.strip() name = self.selenium.find_element(By.TAG_NAME, "h1").text.strip()
name = self.fix_name(name) name = self.fix_name(name)
race, _ = Race.objects.update_or_create(name=name, defaults={}) race, _ = Race.objects.update_or_create(name=name, defaults={"url": url})
self.stdout.write(self.style.SUCCESS(f"Created/updated race {race}")) self.stdout.write(self.style.SUCCESS(f"Created/updated race {race}"))
def fix_name(self, name: str) -> str: def fix_name(self, name: str) -> str:

View file

@ -0,0 +1,38 @@
# Generated by Django 4.1.2 on 2022-10-30 08:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("character", "0007_alter_capability_limited_alter_capability_spell"),
]
operations = [
migrations.AddField(
model_name="capability",
name="url",
field=models.URLField(blank=True),
),
migrations.AddField(
model_name="path",
name="url",
field=models.URLField(blank=True),
),
migrations.AddField(
model_name="profile",
name="url",
field=models.URLField(blank=True),
),
migrations.AddField(
model_name="race",
name="url",
field=models.URLField(blank=True),
),
migrations.AddField(
model_name="racialcapability",
name="url",
field=models.URLField(blank=True),
),
]

View file

@ -0,0 +1,17 @@
# Generated by Django 4.1.2 on 2022-10-30 08:43
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("character", "0008_capability_url_path_url_profile_url_race_url_and_more"),
]
operations = [
migrations.RemoveField(
model_name="racialcapability",
name="url",
),
]

View file

@ -0,0 +1,18 @@
# Generated by Django 4.1.2 on 2022-10-30 08:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("character", "0009_remove_racialcapability_url"),
]
operations = [
migrations.AddField(
model_name="racialcapability",
name="url",
field=models.URLField(blank=True),
),
]

View file

@ -1 +1 @@
0007_alter_capability_limited_alter_capability_spell 0010_racialcapability_url

View file

@ -2,10 +2,10 @@ from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models from django.db import models
from django_extensions.db.models import TimeStampedModel from django_extensions.db.models import TimeStampedModel
from common.models import UniquelyNamedModel from common.models import DocumentedModel, UniquelyNamedModel
class Path(UniquelyNamedModel, TimeStampedModel, models.Model): class Path(DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model):
profile = models.ForeignKey( profile = models.ForeignKey(
"character.Profile", "character.Profile",
on_delete=models.CASCADE, on_delete=models.CASCADE,
@ -31,7 +31,7 @@ class Path(UniquelyNamedModel, TimeStampedModel, models.Model):
notes = models.TextField(blank=True) notes = models.TextField(blank=True)
class Capability(UniquelyNamedModel, TimeStampedModel, models.Model): class Capability(DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model):
path = models.ForeignKey("character.Path", on_delete=models.CASCADE) path = models.ForeignKey("character.Path", on_delete=models.CASCADE)
rank = models.PositiveSmallIntegerField( rank = models.PositiveSmallIntegerField(
validators=[MinValueValidator(1), MaxValueValidator(5)] validators=[MinValueValidator(1), MaxValueValidator(5)]
@ -45,7 +45,9 @@ class Capability(UniquelyNamedModel, TimeStampedModel, models.Model):
verbose_name_plural = "Capabilities" verbose_name_plural = "Capabilities"
class RacialCapability(UniquelyNamedModel, TimeStampedModel, models.Model): class RacialCapability(
DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model
):
race = models.ForeignKey("character.Race", on_delete=models.CASCADE) race = models.ForeignKey("character.Race", on_delete=models.CASCADE)
description = models.TextField() description = models.TextField()

View file

@ -3,10 +3,10 @@ from django.db.models.functions import Lower
from django_extensions.db.models import TimeStampedModel from django_extensions.db.models import TimeStampedModel
from character.models.dice import Dice from character.models.dice import Dice
from common.models import UniquelyNamedModel from common.models import DocumentedModel, UniquelyNamedModel
class Profile(UniquelyNamedModel, TimeStampedModel, models.Model): class Profile(DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model):
class MagicalStrength(models.TextChoices): class MagicalStrength(models.TextChoices):
NONE = "NON", "None" NONE = "NON", "None"
INTELLIGENCE = "INT", "Intelligence" INTELLIGENCE = "INT", "Intelligence"
@ -20,7 +20,7 @@ class Profile(UniquelyNamedModel, TimeStampedModel, models.Model):
notes = models.TextField(blank=True) notes = models.TextField(blank=True)
class Race(UniquelyNamedModel, TimeStampedModel, models.Model): class Race(DocumentedModel, UniquelyNamedModel, TimeStampedModel, models.Model):
pass pass

View file

@ -25,3 +25,10 @@ class UniquelyNamedModel(models.Model):
def natural_key(self): def natural_key(self):
return (self.name,) return (self.name,)
class DocumentedModel(models.Model):
url = models.URLField(blank=True, null=False)
class Meta:
abstract = True