From 6b0275d035669dd8514fbce96a606b19234ee3d2 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Tue, 30 Jun 2020 15:26:03 +0100 Subject: [PATCH] CASCADE on delete removed from key foregin keys --- core/models_caves.py | 36 +++++++++++++----------------------- core/models_survex.py | 38 +++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 42 deletions(-) diff --git a/core/models_caves.py b/core/models_caves.py index 60a62a9..1f11c09 100644 --- a/core/models_caves.py +++ b/core/models_caves.py @@ -26,7 +26,7 @@ class Area(TroggleModel): short_name = models.CharField(max_length=100) name = models.CharField(max_length=200, blank=True, null=True) description = models.TextField(blank=True,null=True) - parent = models.ForeignKey('Area', blank=True, null=True,on_delete=models.CASCADE) + parent = models.ForeignKey('Area', blank=True, null=True,on_delete=models.SET_NULL) def __str__(self): if self.parent: return str(self.parent) + " - " + str(self.short_name) @@ -202,17 +202,6 @@ class Cave(TroggleModel): pass return lowestareas[0] -# This seems to be peculiarly broken, and is now replaced for logbooks. -# def getCaveByReference(reference): - # areaname, code = reference.split("-", 1) - # area = Area.objects.get(short_name = areaname) - # foundCaves = list(Cave.objects.filter(area = area, kataster_number = code).all()) + list(Cave.objects.filter(area = area, unofficial_number = code).all()) - # #print((list(foundCaves))) - # if len(foundCaves) == 1: - # return foundCaves[0] - # else: - # return False - class OtherCaveName(TroggleModel): name = models.CharField(max_length=160) cave = models.ForeignKey(Cave,on_delete=models.CASCADE) @@ -415,8 +404,8 @@ class LogbookEntry(TroggleModel): ) date = models.DateField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.ld() - expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.CASCADE)#MJG wants to KILL THIS (redundant information) - expedition = models.ForeignKey(Expedition,blank=True, null=True,on_delete=models.CASCADE) # yes this is double- + expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS (redundant information) + expedition = models.ForeignKey(Expedition,blank=True, null=True,on_delete=models.SET_NULL) # yes this is double- title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH) cave_slug = models.SlugField(max_length=50, blank=True, null=True) place = models.CharField(max_length=100,blank=True, null=True,help_text="Only use this if you haven't chosen a cave") @@ -488,10 +477,10 @@ class LogbookEntry(TroggleModel): class QM(TroggleModel): # based on qm.csv in trunk/expoweb/1623/204 which has the fields: #"Number","Grade","Area","Description","Page reference","Nearest station","Completion description","Comment" - found_by = models.ForeignKey(LogbookEntry, related_name='QMs_found',blank=True, null=True,on_delete=models.CASCADE ) - ticked_off_by = models.ForeignKey(LogbookEntry, related_name='QMs_ticked_off',blank=True, null=True,on_delete=models.CASCADE) - #cave = models.ForeignKey(Cave,on_delete=models.CASCADE) - #expedition = models.ForeignKey(Expedition,on_delete=models.CASCADE) + found_by = models.ForeignKey(LogbookEntry, related_name='QMs_found',blank=True, null=True,on_delete=models.SET_NULL ) + ticked_off_by = models.ForeignKey(LogbookEntry, related_name='QMs_ticked_off',blank=True, null=True,on_delete=models.SET_NULL) + #cave = models.ForeignKey(Cave,on_delete=models.SET_NULL) + #expedition = models.ForeignKey(Expedition,on_delete=models.SET_NULL) number = models.IntegerField(help_text="this is the sequential number in the year", ) GRADE_CHOICES=( @@ -505,7 +494,7 @@ class QM(TroggleModel): location_description = models.TextField(blank=True) nearest_station_description = models.CharField(max_length=400,blank=True, null=True) nearest_station_name = models.CharField(max_length=200,blank=True, null=True) - nearest_station = models.ForeignKey(SurvexStation,blank=True, null=True,on_delete=models.CASCADE) + nearest_station = models.ForeignKey(SurvexStation,blank=True, null=True,on_delete=models.SET_NULL) area = models.CharField(max_length=100,blank=True, null=True) completion_description = models.TextField(blank=True,null=True) comment=models.TextField(blank=True,null=True) @@ -543,7 +532,7 @@ def get_scan_path(instance, filename): class PersonTrip(TroggleModel): personexpedition = models.ForeignKey("PersonExpedition",null=True,on_delete=models.CASCADE) - #expeditionday = models.ForeignKey("ExpeditionDay",on_delete=models.CASCADE)#MJG wants to KILL THIS (redundant information) + #expeditionday = models.ForeignKey("ExpeditionDay",on_delete=models.SET_NULL)#MJG wants to KILL THIS (redundant information) #date = models.DateField() #MJG wants to KILL THIS (redundant information) time_underground = models.FloatField(help_text="In decimal hours") logbook_entry = models.ForeignKey(LogbookEntry,on_delete=models.CASCADE) @@ -552,9 +541,9 @@ class PersonTrip(TroggleModel): # sequencing by person (difficult to solve locally) #persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', - #blank=True,null=True,on_delete=models.CASCADE)#MJG wants to KILL THIS (and use funstion persontrip_next_auto) + #blank=True,null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS (and use funstion persontrip_next_auto) #persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', - #blank=True,null=True,on_delete=models.CASCADE)#MJG wants to KILL THIS(and use funstion persontrip_prev_auto) + #blank=True,null=True,on_delete=models.SET_NULL)#MJG wants to KILL THIS(and use funstion persontrip_prev_auto) def persontrip_next(self): futurePTs = PersonTrip.objects.filter(personexpedition = self.personexpedition, logbook_entry__date__gt = self.logbook_entry.date).order_by('logbook_entry__date').all() @@ -699,8 +688,10 @@ def GetCaveLookup(): Gcavelookup["2011-01-bs30"] = Gcavelookup["190"] Gcavelookup["bs30"] = Gcavelookup["190"] + Gcavelookup["87"] = Gcavelookup["190"] Gcavelookup["2011-01"] = Gcavelookup["190"] + Gcavelookup["quarriesd"] = Gcavelookup["2002-08"] Gcavelookup["2002-x11"] = Gcavelookup["2005-08"] Gcavelookup["2002-x12"] = Gcavelookup["2005-07"] Gcavelookup["2002-x13"] = Gcavelookup["2005-06"] @@ -733,7 +724,6 @@ def GetCaveLookup(): if not Gcavelookup[id]: pass elif Gcavelookup[id].kataster_number: - #print(Gcavelookup[id], file=sys.stderr) addmore[id] = Gcavelookup[id].kataster_number elif Gcavelookup[id].unofficial_number: addmore[id] = Gcavelookup[id].unofficial_number.lower() diff --git a/core/models_survex.py b/core/models_survex.py index 4f53993..d732130 100644 --- a/core/models_survex.py +++ b/core/models_survex.py @@ -9,8 +9,8 @@ from django.urls import reverse class SurvexDirectory(models.Model): path = models.CharField(max_length=200) - cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE) - primarysurvexfile = models.ForeignKey('SurvexFile', related_name='primarysurvexfile', blank=True, null=True,on_delete=models.CASCADE) + cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.SET_NULL) + primarysurvexfile = models.ForeignKey('SurvexFile', related_name='primarysurvexfile', blank=True, null=True,on_delete=models.SET_NULL) # could also include files in directory but not referenced class Meta: @@ -24,8 +24,8 @@ class SurvexDirectory(models.Model): class SurvexFile(models.Model): path = models.CharField(max_length=200) - survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True,on_delete=models.CASCADE) - cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE) + survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True,on_delete=models.SET_NULL) + cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.SET_NULL) class Meta: ordering = ('id',) @@ -64,8 +64,8 @@ class SurvexStationLookUpManager(models.Manager): class SurvexStation(models.Model): name = models.CharField(max_length=100) - block = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE) -# equate = models.ForeignKey('SurvexEquate', blank=True, null=True,on_delete=models.CASCADE) + block = models.ForeignKey('SurvexBlock', null=True,on_delete=models.SET_NULL) +# equate = models.ForeignKey('SurvexEquate', blank=True, null=True,on_delete=models.SET_NULL) objects = SurvexStationLookUpManager() x = models.FloatField(blank=True, null=True) y = models.FloatField(blank=True, null=True) @@ -99,17 +99,17 @@ class SurvexBlockLookUpManager(models.Manager): class SurvexBlock(models.Model): objects = SurvexBlockLookUpManager() name = models.CharField(max_length=100) - parent = models.ForeignKey('SurvexBlock', blank=True, null=True,on_delete=models.CASCADE) - cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE) + parent = models.ForeignKey('SurvexBlock', blank=True, null=True,on_delete=models.SET_NULL) + cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.SET_NULL) date = models.DateField(blank=True, null=True) - expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.CASCADE) - expedition = models.ForeignKey('Expedition', blank=True, null=True,on_delete=models.CASCADE) + expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL) + expedition = models.ForeignKey('Expedition', blank=True, null=True,on_delete=models.SET_NULL) - survexfile = models.ForeignKey("SurvexFile", blank=True, null=True,on_delete=models.CASCADE) + survexfile = models.ForeignKey("SurvexFile", blank=True, null=True,on_delete=models.SET_NULL) survexpath = models.CharField(max_length=200) # the path for the survex stations - scansfolder = models.ForeignKey("ScansFolder", null=True,on_delete=models.CASCADE) + scansfolder = models.ForeignKey("ScansFolder", null=True,on_delete=models.SET_NULL) legsall = models.IntegerField(null=True) # summary data for this block legssplay = models.IntegerField(null=True) # summary data for this block @@ -146,9 +146,9 @@ class SurvexBlock(models.Model): return list(self.expeditionday.survexblock_set.all()).index(self) class SurvexTitle(models.Model): - survexblock = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE) + survexblock = models.ForeignKey('SurvexBlock',null=True, on_delete=models.SET_NULL) title = models.CharField(max_length=200) # needed by svxcavesingle.html template - cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE) + cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.SET_NULL) # # member of a SurvexBlock @@ -170,10 +170,10 @@ class SurvexPersonRole(models.Model): nrole = models.CharField(choices=ROLE_CHOICES, max_length=200, blank=True, null=True) # increasing levels of precision personname = models.CharField(max_length=100) - person = models.ForeignKey('Person', blank=True, null=True,on_delete=models.CASCADE) - personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True,on_delete=models.CASCADE) - persontrip = models.ForeignKey('PersonTrip', blank=True, null=True,on_delete=models.CASCADE) - expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.CASCADE) + person = models.ForeignKey('Person', blank=True, null=True,on_delete=models.SET_NULL) + personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True,on_delete=models.SET_NULL) + persontrip = models.ForeignKey('PersonTrip', blank=True, null=True,on_delete=models.SET_NULL) + expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL) def __str__(self): return str(self.person) + " - " + str(self.survexblock) + " - " + str(self.nrole) @@ -194,7 +194,7 @@ class ScansFolder(models.Model): class SingleScan(models.Model): ffile = models.CharField(max_length=200) name = models.CharField(max_length=200) - scansfolder = models.ForeignKey("ScansFolder", null=True,on_delete=models.CASCADE) + scansfolder = models.ForeignKey("ScansFolder", null=True,on_delete=models.SET_NULL) class Meta: ordering = ('name',)