2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2026-04-02 10:21:01 +01:00

part-way though converting to slugs for people

This commit is contained in:
2023-10-01 15:55:28 +03:00
parent 16d3ee9f92
commit 7b8703dadc
9 changed files with 84 additions and 43 deletions

View File

@@ -80,14 +80,15 @@ class Person(TroggleModel):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
fullname = models.CharField(max_length=200)
fullname = models.CharField(max_length=200) # display name, but should not be used for lookups
nickname = models.CharField(max_length=200)
slug = models.SlugField(max_length=50, unique=True)
slug = models.SlugField(max_length=50, blank=True, null=True) # unique, enforced in code not in db
is_vfho = models.BooleanField(
help_text="VFHO is the Vereines für Höhlenkunde in Obersteier, a nearby Austrian caving club.",
default=False,
)
is_guest = models.BooleanField(default=False) # This is per-Person, not per-PersonExpedition
mug_shot = models.CharField(max_length=100, blank=True, null=True)
blurb = models.TextField(blank=True, null=True)
orderref = models.CharField(max_length=200) # for alphabetic
@@ -101,6 +102,7 @@ class Person(TroggleModel):
ordering = ("orderref",) # "Wookey" makes too complex for: ('last_name', 'first_name')
def __str__(self):
return self.slug
if self.last_name:
return f"{self.first_name} {self.last_name}"
return self.first_name
@@ -150,7 +152,7 @@ class PersonExpedition(TroggleModel):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
slugfield = models.SlugField(max_length=50, blank=True, null=True) # 2022 to be used in future
is_guest = models.BooleanField(default=False)
# is_guest = models.BooleanField(default=False) # This is per-Person, not per-PersonExpedition
class Meta:
ordering = ("-expedition",)
@@ -162,6 +164,16 @@ class PersonExpedition(TroggleModel):
def get_absolute_url(self):
# we do not use URL_ROOT any more.
return(f"/personexpedition/{self.person.slug}/{self.expedition.year}")
# why does this hang the system ?
return reverse(
"personexpedition",
kwargs={
"slug": self.slug,
"year": self.expedition.year,
},
)
# old style, no longer used
return reverse(
"personexpedition",
kwargs={

View File

@@ -193,6 +193,9 @@ def person(
this_person = Person.objects.get(first_name=first_name, last_name=last_name)
except:
message = f"Person not found '{first_name} {last_name}' - possibly Scottish? (See our <a href=\"/handbook/troggle/namesredesign.html\">Proposal to fix this</a>)"
peeps = Person.objects.filter(first_name=first_name, last_name=last_name)
if len(peeps) > 1:
message = f"Multiple people ({len(peeps)}) with this name '{first_name} {last_name}' - (See our <a href=\"/handbook/troggle/namesredesign.html\">Proposal to fix this</a>)"
return render(request, "errors/generic.html", {"message": message})
return render(request, "person.html", {"person": this_person})
@@ -232,8 +235,8 @@ def get_person_chronology(personexpedition):
return res2
def personexpedition(request, first_name="", last_name="", year=""):
person = Person.objects.get(first_name=first_name, last_name=last_name)
def personexpedition(request, slug="", year=""):
person = Person.objects.get(slug=slug)
this_expedition = Expedition.objects.get(year=year)
personexpedition = person.personexpedition_set.get(expedition=this_expedition)
personchronology = get_person_chronology(personexpedition)

View File

@@ -142,7 +142,7 @@ def fixsurvextick(w, ticks):
ticks["S"] = w.fixsurvextick(ticks["S"])
def walletslistperson(request, first_name, last_name):
def walletslistperson(request, slug):
"""Page which displays a list of all the wallets for a specific person
HORRIBLE linear search through everything. Index and do SQL query properly
"""
@@ -163,20 +163,21 @@ def walletslistperson(request, first_name, last_name):
return manywallets
# print("-walletslistperson")
p = Person.objects.get(slug=slug)
# try:
try:
if last_name:
p = Person.objects.get(fullname=f"{first_name} {last_name}")
else:
# special Wookey-hack
p = Person.objects.get(first_name=f"{first_name}")
except:
# raise
return render(
request,
"errors/generic.html",
{"message": f'Unrecognised name of a expo person: "{first_name} {last_name}"'},
)
# if last_name:
# p = Person.objects.get(fullname=f"{first_name} {last_name}")
# else:
# # special Wookey-hack
# p = Person.objects.get(first_name=f"{first_name}")
# except:
# # raise
# return render(
# request,
# "errors/generic.html",
# {"message": f'Unrecognised name of a expo person: "{first_name} {last_name}"'},
# )
manywallets = tickspersonwallet(p)
expeditions = Expedition.objects.all()