Added cached readonly field "address" to traveler to allow search functionally and reduce database lookups
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user