Added cached readonly field "address" to traveler to allow search functionally and reduce database lookups

This commit is contained in:
John Mullins
2024-02-16 18:10:08 +11:00
parent 83d5874155
commit cd022fbf54
3 changed files with 10 additions and 39 deletions
+1 -10
View File
@@ -185,7 +185,7 @@ class TravellerAdmin(MyImportExportModelAdmin, admin.ModelAdmin, TravellerRollMi
title="End date"
))
]
search_fields = ["first_name", "last_name"]
search_fields = ["first_name", "last_name", "address"]
inlines = [FamilyInline, TravellerRouteInline]
readonly_fields = ["travel_start_date", "travel_end_date", "fare_paying", "created_on", "last_edit", "is_active", "address"]
actions = ["export_to_csv", "send_sms", "confirmation_letter", "letter_creator"]
@@ -233,15 +233,6 @@ class TravellerAdmin(MyImportExportModelAdmin, admin.ModelAdmin, TravellerRollMi
return stops.first()
return "Multiple"
def address(self, obj):
families = Family.objects.filter(traveller__id__exact=obj.id)
if families.count() == 0:
return ""
if families.count() == 1:
family = families.first()
return f"{family.residential_address} {family.residential_suburb}"
return "Multiple"
# def save_model(self, request, obj, form, change):
# if obj.is_archived and obj.travel_end_date is None:
# obj.is_archived = False
+8 -5
View File
@@ -182,6 +182,7 @@ class Traveller(models.Model):
year_level = models.CharField(max_length=2, choices=YEAR)
bus_stops = models.ManyToManyField(BusStop, through='TravellerRoute', blank=True)
distance_to_school = models.PositiveSmallIntegerField(blank=True, null=True)
address = models.CharField(max_length=100, default="")
travel_start_date = models.DateField(blank=True, null=True)
travel_end_date = models.DateField(blank=True, null=True)
@@ -211,6 +212,7 @@ class Traveller(models.Model):
def save(self, *args, **kwargs):
self._update_active_status()
self._repopulate_address()
super(Traveller, self).save(*args, **kwargs)
def _is_active(self):
@@ -259,14 +261,15 @@ class Traveller(models.Model):
stops = 1
return f"${str(cost * stops)}"
def address(self):
def _repopulate_address(self):
families = Family.objects.filter(traveller__id__exact=self.id)
if families.count() == 0:
return ""
if families.count() == 1:
self.address = ""
elif families.count() == 1:
family = families.first()
return f"{family.residential_address} {family.residential_suburb}"
return "Multiple"
self.address = f"{family.residential_address} {family.residential_suburb}"
else:
self.address = "Multiple"
def get_parsed_numbers(self, parents=False, emergency=False):
return [] # Moved to family model. To remove from traveller model
+1 -24
View File
@@ -11,27 +11,4 @@ def nightly_check_active_status():
traveller.save()
for traveller in Traveller.objects.all():
if Family.objects.filter(traveller=traveller).exists():
continue
fam = Family()
fam.traveller = traveller
fam.residential_address = traveller.residential_address
fam.residential_suburb = traveller.residential_suburb
fam.postal_address = traveller.postal_address
fam.parent_A_firstname = traveller.parent_A_firstname
fam.parent_A_lastname = traveller.parent_A_lastname
fam.parent_A_phone = traveller.parent_A_phone
fam.parent_A_email = traveller.parent_A_email
fam.parent_B_firstname = traveller.parent_B_firstname
fam.parent_B_lastname = traveller.parent_B_lastname
fam.parent_B_phone = traveller.parent_B_phone
fam.parent_B_email = traveller.parent_B_email
fam.emergency_contact_A_firstname = traveller.emergency_contact_A_firstname
fam.emergency_contact_A_lastname = traveller.emergency_contact_A_lastname
fam.emergency_contact_A_phone = traveller.emergency_contact_A_phone
fam.emergency_contact_A_relation = traveller.emergency_contact_A_firstname
fam.emergency_contact_B_firstname = traveller.emergency_contact_B_firstname
fam.emergency_contact_B_lastname = traveller.emergency_contact_B_lastname
fam.emergency_contact_B_phone = traveller.emergency_contact_B_firstname
fam.emergency_contact_B_relation = traveller.emergency_contact_B_relation
fam.save()
traveller.save()