2022-10-29 00:32:18 +02:00
|
|
|
from django.contrib import admin
|
2022-10-31 14:47:13 +01:00
|
|
|
from django.forms import ModelForm
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
from character import models
|
|
|
|
|
|
|
|
|
|
|
|
@admin.register(models.Capability)
|
|
|
|
class CapabilityAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "path", "rank", "limited", "spell"]
|
|
|
|
list_filter = ["path", "path__profile", "path__race", "rank", "limited", "spell"]
|
|
|
|
search_fields = ["name", "description"]
|
2022-10-30 09:44:28 +01:00
|
|
|
fieldsets = [
|
|
|
|
(None, {"fields": ["name"]}),
|
2022-10-30 11:09:46 +01:00
|
|
|
("Voie", {"fields": [("path", "rank")]}),
|
2022-10-30 09:44:28 +01:00
|
|
|
("Type", {"fields": [("limited", "spell")]}),
|
|
|
|
("Description", {"fields": ["description"]}),
|
|
|
|
("Documentation", {"fields": ["url"]}),
|
|
|
|
]
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
|
2022-10-31 22:54:31 +01:00
|
|
|
class CapabilityInline(admin.TabularInline):
|
|
|
|
model = models.Capability
|
|
|
|
fields = ["name", "rank", "limited", "spell"]
|
|
|
|
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
@admin.register(models.Path)
|
|
|
|
class PathAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "category", "related_to"]
|
|
|
|
list_filter = ["category"]
|
|
|
|
search_fields = ["name"]
|
|
|
|
fieldsets = [
|
|
|
|
(None, {"fields": ["name"]}),
|
2022-10-30 11:09:46 +01:00
|
|
|
("Lié à", {"fields": ["category", ("profile", "race")]}),
|
2022-10-29 00:32:18 +02:00
|
|
|
("Notes", {"fields": ["notes"]}),
|
2022-10-30 09:44:28 +01:00
|
|
|
("Documentation", {"fields": ["url"]}),
|
2022-10-29 00:32:18 +02:00
|
|
|
]
|
2022-10-31 22:54:31 +01:00
|
|
|
inlines = [CapabilityInline]
|
2022-10-29 00:32:18 +02:00
|
|
|
|
2022-10-31 14:47:13 +01:00
|
|
|
def get_queryset(self, request):
|
|
|
|
return super().get_queryset(request).select_related("profile", "race")
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
def related_to(self, instance: models.Path) -> str:
|
|
|
|
category = models.Path.Category(instance.category)
|
|
|
|
if category == models.Path.Category.PROFILE:
|
|
|
|
return str(instance.profile)
|
2023-01-29 10:38:41 +01:00
|
|
|
if category == models.Path.Category.RACE:
|
2022-10-29 00:32:18 +02:00
|
|
|
return str(instance.race)
|
2023-01-29 10:38:41 +01:00
|
|
|
return ""
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
@admin.register(models.RacialCapability)
|
|
|
|
class RacialCapabilityAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "race"]
|
|
|
|
list_filter = ["race"]
|
|
|
|
search_fields = ["name", "description"]
|
|
|
|
|
|
|
|
|
2022-10-29 11:03:23 +02:00
|
|
|
class PathInline(admin.TabularInline):
|
|
|
|
model = models.Path
|
|
|
|
fields = ["name"]
|
|
|
|
extra = 0
|
|
|
|
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
@admin.register(models.Profile)
|
|
|
|
class ProfileAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "life_dice", "magical_strength"]
|
|
|
|
list_filter = ["life_dice", "magical_strength"]
|
|
|
|
search_fields = ["name"]
|
2022-10-29 11:03:23 +02:00
|
|
|
inlines = [PathInline]
|
2022-10-30 09:44:28 +01:00
|
|
|
fieldsets = [
|
2022-10-30 22:18:42 +01:00
|
|
|
(
|
|
|
|
None,
|
|
|
|
{"fields": ["name", ("magical_strength", "life_dice", "mana_max_compute")]},
|
|
|
|
),
|
2022-10-30 09:44:28 +01:00
|
|
|
("Notes", {"fields": ["notes"]}),
|
|
|
|
("Documentation", {"fields": ["url"]}),
|
|
|
|
]
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
class RacialCapabilityInline(admin.TabularInline):
|
|
|
|
model = models.RacialCapability
|
|
|
|
extra = 0
|
|
|
|
|
|
|
|
|
|
|
|
@admin.register(models.Race)
|
|
|
|
class RaceAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name"]
|
|
|
|
search_fields = ["name"]
|
2022-10-29 11:03:23 +02:00
|
|
|
inlines = [RacialCapabilityInline, PathInline]
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
|
2022-10-31 14:47:13 +01:00
|
|
|
class CharacterAdminForm(ModelForm):
|
|
|
|
class Meta:
|
|
|
|
model = models.Character
|
2023-02-28 12:34:45 +01:00
|
|
|
exclude = () # noqa: DJ006
|
2022-10-31 14:47:13 +01:00
|
|
|
|
2023-02-28 12:34:45 +01:00
|
|
|
def __init__(self, *args, **kwargs) -> None:
|
2022-10-31 14:47:13 +01:00
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.fields["capabilities"].queryset = models.Capability.objects.select_related(
|
2023-02-28 12:34:45 +01:00
|
|
|
"path",
|
|
|
|
"path__race",
|
|
|
|
"path__profile",
|
2022-10-31 14:47:13 +01:00
|
|
|
)
|
2024-01-29 22:06:38 +01:00
|
|
|
self.fields["racial_capability"].queryset = (
|
|
|
|
models.RacialCapability.objects.select_related("race")
|
|
|
|
)
|
2022-10-31 14:47:13 +01:00
|
|
|
|
|
|
|
|
2022-11-02 23:10:48 +01:00
|
|
|
class PartyInline(admin.TabularInline):
|
|
|
|
model = models.Character.parties.through
|
|
|
|
extra = 0
|
|
|
|
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
@admin.register(models.Character)
|
|
|
|
class CharacterAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "player", "race", "profile", "level"]
|
|
|
|
list_filter = ["race", "profile"]
|
|
|
|
search_fields = ["name", "notes"]
|
|
|
|
|
|
|
|
fieldsets = [
|
|
|
|
(
|
2022-10-30 11:09:46 +01:00
|
|
|
"Identité",
|
2022-12-09 18:38:24 +01:00
|
|
|
{
|
|
|
|
"fields": [
|
|
|
|
"name",
|
|
|
|
"profile_picture",
|
|
|
|
"player",
|
|
|
|
"profile",
|
|
|
|
"level",
|
|
|
|
"race",
|
|
|
|
"private",
|
2023-02-28 12:34:45 +01:00
|
|
|
],
|
2022-12-09 18:38:24 +01:00
|
|
|
},
|
2022-10-29 00:32:18 +02:00
|
|
|
),
|
2022-10-30 11:09:46 +01:00
|
|
|
("Apparence", {"fields": ["gender", "age", "height", "weight"]}),
|
2022-10-29 00:32:18 +02:00
|
|
|
(
|
2022-10-30 11:09:46 +01:00
|
|
|
"Caractéristiques",
|
2022-10-29 00:32:18 +02:00
|
|
|
{
|
|
|
|
"fields": [
|
|
|
|
("value_strength", "modifier_strength"),
|
|
|
|
("value_dexterity", "modifier_dexterity"),
|
|
|
|
("value_constitution", "modifier_constitution"),
|
|
|
|
("value_intelligence", "modifier_intelligence"),
|
|
|
|
("value_wisdom", "modifier_wisdom"),
|
|
|
|
("value_charisma", "modifier_charisma"),
|
2023-02-28 12:34:45 +01:00
|
|
|
],
|
2022-10-29 00:32:18 +02:00
|
|
|
},
|
|
|
|
),
|
|
|
|
(
|
2022-10-30 11:09:46 +01:00
|
|
|
"Combat",
|
2022-11-02 13:03:20 +01:00
|
|
|
{
|
|
|
|
"fields": [
|
|
|
|
("initiative_misc", "modifier_initiative"),
|
|
|
|
"attack_melee",
|
|
|
|
"attack_range",
|
|
|
|
"attack_magic",
|
2022-11-02 21:41:06 +01:00
|
|
|
"states",
|
2023-02-28 12:34:45 +01:00
|
|
|
],
|
2022-11-02 13:03:20 +01:00
|
|
|
},
|
2022-10-29 00:32:18 +02:00
|
|
|
),
|
2022-10-30 21:55:05 +01:00
|
|
|
("Vitalité", {"fields": [("health_max", "health_remaining")]}),
|
2022-10-30 11:09:46 +01:00
|
|
|
("Défense", {"fields": ["armor", "shield", "defense_misc", "defense"]}),
|
2022-10-30 17:58:42 +01:00
|
|
|
(
|
|
|
|
"Armes & équipement",
|
|
|
|
{
|
|
|
|
"fields": [
|
|
|
|
"weapons",
|
|
|
|
"equipment",
|
|
|
|
("money_pp", "money_po", "money_pa", "money_pc"),
|
2023-02-28 12:34:45 +01:00
|
|
|
],
|
2022-10-30 17:58:42 +01:00
|
|
|
},
|
|
|
|
),
|
2022-10-30 11:09:46 +01:00
|
|
|
("Race", {"fields": ["racial_capability"]}),
|
2023-06-19 17:43:27 +02:00
|
|
|
("Voies & capacités", {"fields": ["paths", "capabilities"]}),
|
2022-10-30 21:55:05 +01:00
|
|
|
("Chance", {"fields": [("luck_points_max", "luck_points_remaining")]}),
|
|
|
|
("Mana", {"fields": [("mana_max", "mana_remaining")]}),
|
|
|
|
(
|
|
|
|
"Récupération",
|
|
|
|
{"fields": [("recovery_points_max", "recovery_points_remaining")]},
|
|
|
|
),
|
2022-10-29 00:32:18 +02:00
|
|
|
("Notes", {"fields": ["notes"]}),
|
|
|
|
]
|
|
|
|
readonly_fields = [
|
|
|
|
"modifier_strength",
|
|
|
|
"modifier_dexterity",
|
|
|
|
"modifier_constitution",
|
|
|
|
"modifier_intelligence",
|
|
|
|
"modifier_wisdom",
|
|
|
|
"modifier_charisma",
|
2022-11-02 13:03:20 +01:00
|
|
|
"modifier_initiative",
|
2022-10-29 00:32:18 +02:00
|
|
|
"attack_melee",
|
|
|
|
"attack_range",
|
|
|
|
"attack_magic",
|
|
|
|
"defense",
|
|
|
|
"mana_max",
|
2022-10-30 21:55:05 +01:00
|
|
|
"recovery_points_max",
|
2022-10-31 00:20:55 +01:00
|
|
|
"luck_points_max",
|
2022-10-29 00:32:18 +02:00
|
|
|
]
|
|
|
|
filter_horizontal = [
|
|
|
|
"capabilities",
|
|
|
|
"weapons",
|
2022-11-02 21:41:06 +01:00
|
|
|
"states",
|
2022-10-29 00:32:18 +02:00
|
|
|
]
|
2022-11-02 23:10:48 +01:00
|
|
|
inlines = [PartyInline]
|
2022-10-29 00:32:18 +02:00
|
|
|
|
2022-10-31 14:47:13 +01:00
|
|
|
form = CharacterAdminForm
|
|
|
|
|
2022-10-31 19:23:37 +01:00
|
|
|
def has_change_permission(self, request, obj=None):
|
|
|
|
if obj is None:
|
|
|
|
return super().has_change_permission(request, obj)
|
|
|
|
return obj.player == request.user or request.user.is_superuser
|
|
|
|
|
2022-10-29 00:32:18 +02:00
|
|
|
|
|
|
|
@admin.register(models.Weapon)
|
|
|
|
class WeaponAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "damage"]
|
|
|
|
search_fields = ["name", "special", "damage"]
|
2022-11-02 21:41:06 +01:00
|
|
|
|
|
|
|
|
|
|
|
@admin.register(models.HarmfulState)
|
|
|
|
class HarmfulStateAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["name", "description"]
|
|
|
|
search_fields = ["name"]
|