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"
|
title="End date"
|
||||||
))
|
))
|
||||||
]
|
]
|
||||||
search_fields = ["first_name", "last_name"]
|
search_fields = ["first_name", "last_name", "address"]
|
||||||
inlines = [FamilyInline, TravellerRouteInline]
|
inlines = [FamilyInline, TravellerRouteInline]
|
||||||
readonly_fields = ["travel_start_date", "travel_end_date", "fare_paying", "created_on", "last_edit", "is_active", "address"]
|
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"]
|
actions = ["export_to_csv", "send_sms", "confirmation_letter", "letter_creator"]
|
||||||
@@ -233,15 +233,6 @@ class TravellerAdmin(MyImportExportModelAdmin, admin.ModelAdmin, TravellerRollMi
|
|||||||
return stops.first()
|
return stops.first()
|
||||||
return "Multiple"
|
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):
|
# def save_model(self, request, obj, form, change):
|
||||||
# if obj.is_archived and obj.travel_end_date is None:
|
# if obj.is_archived and obj.travel_end_date is None:
|
||||||
# obj.is_archived = False
|
# obj.is_archived = False
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ class Traveller(models.Model):
|
|||||||
year_level = models.CharField(max_length=2, choices=YEAR)
|
year_level = models.CharField(max_length=2, choices=YEAR)
|
||||||
bus_stops = models.ManyToManyField(BusStop, through='TravellerRoute', blank=True)
|
bus_stops = models.ManyToManyField(BusStop, through='TravellerRoute', blank=True)
|
||||||
distance_to_school = models.PositiveSmallIntegerField(blank=True, null=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_start_date = models.DateField(blank=True, null=True)
|
||||||
travel_end_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):
|
def save(self, *args, **kwargs):
|
||||||
self._update_active_status()
|
self._update_active_status()
|
||||||
|
self._repopulate_address()
|
||||||
super(Traveller, self).save(*args, **kwargs)
|
super(Traveller, self).save(*args, **kwargs)
|
||||||
|
|
||||||
def _is_active(self):
|
def _is_active(self):
|
||||||
@@ -259,14 +261,15 @@ class Traveller(models.Model):
|
|||||||
stops = 1
|
stops = 1
|
||||||
return f"${str(cost * stops)}"
|
return f"${str(cost * stops)}"
|
||||||
|
|
||||||
def address(self):
|
def _repopulate_address(self):
|
||||||
families = Family.objects.filter(traveller__id__exact=self.id)
|
families = Family.objects.filter(traveller__id__exact=self.id)
|
||||||
if families.count() == 0:
|
if families.count() == 0:
|
||||||
return ""
|
self.address = ""
|
||||||
if families.count() == 1:
|
elif families.count() == 1:
|
||||||
family = families.first()
|
family = families.first()
|
||||||
return f"{family.residential_address} {family.residential_suburb}"
|
self.address = f"{family.residential_address} {family.residential_suburb}"
|
||||||
return "Multiple"
|
else:
|
||||||
|
self.address = "Multiple"
|
||||||
|
|
||||||
def get_parsed_numbers(self, parents=False, emergency=False):
|
def get_parsed_numbers(self, parents=False, emergency=False):
|
||||||
return [] # Moved to family model. To remove from traveller model
|
return [] # Moved to family model. To remove from traveller model
|
||||||
|
|||||||
@@ -11,27 +11,4 @@ def nightly_check_active_status():
|
|||||||
traveller.save()
|
traveller.save()
|
||||||
|
|
||||||
for traveller in Traveller.objects.all():
|
for traveller in Traveller.objects.all():
|
||||||
if Family.objects.filter(traveller=traveller).exists():
|
traveller.save()
|
||||||
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()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user