2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-25 08:41:51 +00:00

n_delete=... soon to be required

This commit is contained in:
Philip Sargent 2020-06-18 00:20:47 +01:00
parent 55dd577275
commit ee92182163
4 changed files with 78 additions and 76 deletions

View File

@ -5,7 +5,7 @@ import logging
import re
from subprocess import call
import urllib.parse
from urllib.parse import urljoin
from decimal import Decimal, getcontext
getcontext().prec=2 #use 2 significant figures for decimal calculations
@ -53,7 +53,7 @@ class TroggleModel(models.Model):
return self._meta.object_name
def get_admin_url(self):
return urllib.parse.urljoin(settings.URL_ROOT, "/admin/core/" + self.object_name().lower() + "/" + str(self.pk))
return urljoin(settings.URL_ROOT, "/admin/core/" + self.object_name().lower() + "/" + str(self.pk))
class Meta:
abstract = True
@ -84,7 +84,7 @@ class Expedition(TroggleModel):
get_latest_by = 'year'
def get_absolute_url(self):
return urllib.parse.urljoin(settings.URL_ROOT, reverse('expedition', args=[self.year]))
return urljoin(settings.URL_ROOT, reverse('expedition', args=[self.year]))
# construction function. should be moved out
def get_expedition_day(self, date):
@ -105,7 +105,7 @@ class Expedition(TroggleModel):
return res and res[len(res) - 1] or None
class ExpeditionDay(TroggleModel):
expedition = models.ForeignKey("Expedition")
expedition = models.ForeignKey("Expedition",on_delete=models.CASCADE)
date = models.DateField()
class Meta:
@ -127,9 +127,9 @@ class Person(TroggleModel):
#href = models.CharField(max_length=200)
orderref = models.CharField(max_length=200) # for alphabetic
user = models.OneToOneField(User, null=True, blank=True)
user = models.OneToOneField(User, null=True, blank=True,on_delete=models.CASCADE)
def get_absolute_url(self):
return urllib.parse.urljoin(settings.URL_ROOT,reverse('person',kwargs={'first_name':self.first_name,'last_name':self.last_name}))
return urljoin(settings.URL_ROOT,reverse('person',kwargs={'first_name':self.first_name,'last_name':self.last_name}))
class Meta:
verbose_name_plural = "People"
@ -168,9 +168,9 @@ class Person(TroggleModel):
class PersonExpedition(TroggleModel):
"""Person's attendance to one Expo
"""
expedition = models.ForeignKey(Expedition)
person = models.ForeignKey(Person)
slugfield = models.SlugField(max_length=50,blank=True,null=True)
expedition = models.ForeignKey(Expedition,on_delete=models.CASCADE)
person = models.ForeignKey(Person,on_delete=models.CASCADE)
slugfield = models.SlugField(max_length=50,blank=True, null=True)
is_guest = models.BooleanField(default=False)
COMMITTEE_CHOICES = (
@ -181,7 +181,7 @@ class PersonExpedition(TroggleModel):
('research','Expo research coordinator'),
)
expo_committee_position = models.CharField(blank=True,null=True,choices=COMMITTEE_CHOICES,max_length=200)
nickname = models.CharField(max_length=100,blank=True,null=True)
nickname = models.CharField(max_length=100,blank=True, null=True)
def GetPersonroles(self):
res = [ ]
@ -208,7 +208,7 @@ class PersonExpedition(TroggleModel):
return self.person.first_name
def get_absolute_url(self):
return urllib.parse.urljoin(settings.URL_ROOT, reverse('personexpedition',kwargs={'first_name':self.person.first_name,'last_name':self.person.last_name,'year':self.expedition.year}))
return urljoin(settings.URL_ROOT, reverse('personexpedition',kwargs={'first_name':self.person.first_name,'last_name':self.person.last_name,'year':self.expedition.year}))
def surveyedleglength(self):
survexblocks = [personrole.survexblock for personrole in self.personrole_set.all() ]

View File

@ -25,7 +25,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)
parent = models.ForeignKey('Area', blank=True, null=True,on_delete=models.CASCADE)
def __str__(self):
if self.parent:
return str(self.parent) + " - " + str(self.short_name)
@ -38,14 +38,14 @@ class Area(TroggleModel):
return self.parent.kat_area()
class CaveAndEntrance(models.Model):
cave = models.ForeignKey('Cave')
entrance = models.ForeignKey('Entrance')
entrance_letter = models.CharField(max_length=20,blank=True,null=True)
cave = models.ForeignKey('Cave',on_delete=models.CASCADE)
entrance = models.ForeignKey('Entrance',on_delete=models.CASCADE)
entrance_letter = models.CharField(max_length=20,blank=True, null=True)
def __str__(self):
return str(self.cave) + str(self.entrance_letter)
class CaveSlug(models.Model):
cave = models.ForeignKey('Cave')
cave = models.ForeignKey('Cave',on_delete=models.CASCADE)
slug = models.SlugField(max_length=50, unique = True)
primary = models.BooleanField(default=False)
@ -53,7 +53,7 @@ class Cave(TroggleModel):
# too much here perhaps,
official_name = models.CharField(max_length=160)
area = models.ManyToManyField(Area, blank=True)
kataster_code = models.CharField(max_length=20,blank=True,null=True)
kataster_code = models.CharField(max_length=20,blank=True, null=True)
kataster_number = models.CharField(max_length=10,blank=True, null=True)
unofficial_number = models.CharField(max_length=60,blank=True, null=True)
entrances = models.ManyToManyField('Entrance', through='CaveAndEntrance')
@ -65,12 +65,12 @@ class Cave(TroggleModel):
kataster_status = models.TextField(blank=True,null=True)
underground_centre_line = models.TextField(blank=True,null=True)
notes = models.TextField(blank=True,null=True)
length = models.CharField(max_length=100,blank=True,null=True)
depth = models.CharField(max_length=100,blank=True,null=True)
extent = models.CharField(max_length=100,blank=True,null=True)
survex_file = models.CharField(max_length=100,blank=True,null=True)
description_file = models.CharField(max_length=200,blank=True,null=True)
url = models.CharField(max_length=200,blank=True,null=True)
length = models.CharField(max_length=100,blank=True, null=True)
depth = models.CharField(max_length=100,blank=True, null=True)
extent = models.CharField(max_length=100,blank=True, null=True)
survex_file = models.CharField(max_length=100,blank=True, null=True)
description_file = models.CharField(max_length=200,blank=True, null=True)
url = models.CharField(max_length=200,blank=True, null=True)
filename = models.CharField(max_length=200)
#class Meta:
@ -215,12 +215,12 @@ def getCaveByReference(reference):
class OtherCaveName(TroggleModel):
name = models.CharField(max_length=160)
cave = models.ForeignKey(Cave)
cave = models.ForeignKey(Cave,on_delete=models.CASCADE)
def __str__(self):
return str(self.name)
class EntranceSlug(models.Model):
entrance = models.ForeignKey('Entrance')
entrance = models.ForeignKey('Entrance',on_delete=models.CASCADE)
slug = models.SlugField(max_length=50, unique = True)
primary = models.BooleanField(default=False)
@ -260,9 +260,9 @@ class Entrance(TroggleModel):
other_station = models.TextField(blank=True, null=True)
other_description = models.TextField(blank=True,null=True)
bearings = models.TextField(blank=True,null=True)
url = models.CharField(max_length=200,blank=True,null=True)
url = models.CharField(max_length=200,blank=True, null=True)
filename = models.CharField(max_length=200)
cached_primary_slug = models.CharField(max_length=200,blank=True,null=True)
cached_primary_slug = models.CharField(max_length=200,blank=True, null=True)
def __str__(self):
return str(self.slug())
@ -415,11 +415,11 @@ 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)#MJG wants to KILL THIS (redundant information)
expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double-
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-
title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH)
cave_slug = models.SlugField(max_length=50)
place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave")
place = models.CharField(max_length=100,blank=True, null=True,help_text="Only use this if you haven't chosen a cave")
text = models.TextField()
slug = models.SlugField(max_length=50)
filename = models.CharField(max_length=200,null=True)
@ -488,10 +488,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 )
ticked_off_by = models.ForeignKey(LogbookEntry, related_name='QMs_ticked_off',null=True,blank=True)
#cave = models.ForeignKey(Cave)
#expedition = models.ForeignKey(Expedition)
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)
number = models.IntegerField(help_text="this is the sequential number in the year", )
GRADE_CHOICES=(
@ -503,10 +503,10 @@ class QM(TroggleModel):
)
grade = models.CharField(max_length=1, choices=GRADE_CHOICES)
location_description = models.TextField(blank=True)
nearest_station_description = models.CharField(max_length=400,null=True,blank=True)
nearest_station_name = models.CharField(max_length=200,blank=True,null=True)
nearest_station = models.ForeignKey(SurvexStation,null=True,blank=True)
area = models.CharField(max_length=100,blank=True,null=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)
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)
@ -541,18 +541,20 @@ def get_scan_path(instance, filename):
# Single Person going on a trip, which may or may not be written up (accounts for different T/U for people in same logbook entry)
#
class PersonTrip(TroggleModel):
personexpedition = models.ForeignKey("PersonExpedition",null=True)
personexpedition = models.ForeignKey("PersonExpedition",null=True,on_delete=models.CASCADE)
#expeditionday = models.ForeignKey("ExpeditionDay")#MJG wants to KILL THIS (redundant information)
#expeditionday = models.ForeignKey("ExpeditionDay",on_delete=models.CASCADE)#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)
logbook_entry = models.ForeignKey(LogbookEntry,on_delete=models.CASCADE)
is_logbook_entry_author = models.BooleanField(default=False)
# sequencing by person (difficult to solve locally)
#persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', blank=True,null=True)#MJG wants to KILL THIS (and use funstion persontrip_next_auto)
#persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', blank=True,null=True)#MJG wants to KILL THIS(and use funstion persontrip_prev_auto)
#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)
#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)
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()

View File

@ -1,5 +1,5 @@
import os
import urllib.parse
from urllib.parse import urljoin
import re
from django.db import models
@ -16,8 +16,8 @@ from django.core.urlresolvers import reverse
class SurvexDirectory(models.Model):
path = models.CharField(max_length=200)
cave = models.ForeignKey('Cave', blank=True, null=True)
primarysurvexfile = models.ForeignKey('SurvexFile', related_name='primarysurvexfile', blank=True, null=True)
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)
# could also include files in directory but not referenced
class Meta:
@ -26,8 +26,8 @@ class SurvexDirectory(models.Model):
class SurvexFile(models.Model):
path = models.CharField(max_length=200)
survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True)
cave = models.ForeignKey('Cave', blank=True, null=True)
survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True,on_delete=models.CASCADE)
cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE)
class Meta:
ordering = ('id',)
@ -53,7 +53,7 @@ class SurvexFile(models.Model):
class SurvexEquate(models.Model):
cave = models.ForeignKey('Cave', blank=True, null=True)
cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE)
class SurvexStationLookUpManager(models.Manager):
def lookup(self, name):
@ -63,8 +63,8 @@ class SurvexStationLookUpManager(models.Manager):
class SurvexStation(models.Model):
name = models.CharField(max_length=100)
block = models.ForeignKey('SurvexBlock')
equate = models.ForeignKey('SurvexEquate', blank=True, null=True)
block = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE)
equate = models.ForeignKey('SurvexEquate', blank=True, null=True,on_delete=models.CASCADE)
objects = SurvexStationLookUpManager()
x = models.FloatField(blank=True, null=True)
y = models.FloatField(blank=True, null=True)
@ -82,10 +82,10 @@ class SurvexStation(models.Model):
return r
# class SurvexLeg(models.Model):
# block = models.ForeignKey('SurvexBlock')
# #title = models.ForeignKey('SurvexTitle')
# stationfrom = models.ForeignKey('SurvexStation', related_name='stationfrom')
# stationto = models.ForeignKey('SurvexStation', related_name='stationto')
# block = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE)
# #title = models.ForeignKey('SurvexTitle',on_delete=models.CASCADE)
# stationfrom = models.ForeignKey('SurvexStation', related_name='stationfrom',on_delete=models.CASCADE)
# stationto = models.ForeignKey('SurvexStation', related_name='stationto',on_delete=models.CASCADE)
# tape = models.FloatField()
# compass = models.FloatField()
# clino = models.FloatField()
@ -111,25 +111,25 @@ class SurvexBlockLookUpManager(models.Manager):
class SurvexBlock(models.Model):
objects = SurvexBlockLookUpManager()
name = models.CharField(max_length=100)
parent = models.ForeignKey('SurvexBlock', blank=True, null=True)
parent = models.ForeignKey('SurvexBlock', blank=True, null=True,on_delete=models.CASCADE)
# text = models.TextField()
cave = models.ForeignKey('Cave', blank=True, null=True)
cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE)
date = models.DateField(blank=True, null=True)
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
expedition = models.ForeignKey('Expedition', 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)
survexfile = models.ForeignKey("SurvexFile", blank=True, null=True)
survexfile = models.ForeignKey("SurvexFile", blank=True, null=True,on_delete=models.CASCADE)
# begin_char = models.IntegerField() # code for where in the survex data files this block sits
survexpath = models.CharField(max_length=200) # the path for the survex stations
survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True)
survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True,on_delete=models.CASCADE)
#refscandir = models.CharField(max_length=100)
legsall = models.IntegerField() # summary data for this block
legssplay = models.IntegerField() # summary data for this block
legssurfc = models.IntegerField() # summary data for this block
totalleglength = models.FloatField()
legsall = models.IntegerField(null=True) # summary data for this block
legssplay = models.IntegerField(null=True) # summary data for this block
legssurfc = models.IntegerField(null=True) # summary data for this block
totalleglength = models.FloatField(null=True)
class Meta:
ordering = ('id',)
@ -163,9 +163,9 @@ class SurvexBlock(models.Model):
return list(self.expeditionday.survexblock_set.all()).index(self)
class SurvexTitle(models.Model):
survexblock = models.ForeignKey('SurvexBlock')
survexblock = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE)
title = models.CharField(max_length=200)
cave = models.ForeignKey('Cave', blank=True, null=True)
cave = models.ForeignKey('Cave', blank=True, null=True,on_delete=models.CASCADE)
#
# member of a SurvexBlock
@ -183,14 +183,14 @@ ROLE_CHOICES = (
)
class SurvexPersonRole(models.Model):
survexblock = models.ForeignKey('SurvexBlock')
survexblock = models.ForeignKey('SurvexBlock',on_delete=models.CASCADE)
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)
personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True)
persontrip = models.ForeignKey('PersonTrip', blank=True, null=True)
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
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)
def __str__(self):
return str(self.person) + " - " + str(self.survexblock) + " - " + str(self.nrole)
@ -203,7 +203,7 @@ class SurvexScansFolder(models.Model):
ordering = ('walletname',)
def get_absolute_url(self):
return urllib.parse.urljoin(settings.URL_ROOT, reverse('surveyscansfolder', kwargs={"path":re.sub("#", "%23", self.walletname)}))
return urljoin(settings.URL_ROOT, reverse('surveyscansfolder', kwargs={"path":re.sub("#", "%23", self.walletname)}))
def __str__(self):
return str(self.walletname) + " (Survey Scans Folder)"
@ -211,13 +211,13 @@ class SurvexScansFolder(models.Model):
class SurvexScanSingle(models.Model):
ffile = models.CharField(max_length=200)
name = models.CharField(max_length=200)
survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True)
survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True,on_delete=models.CASCADE)
class Meta:
ordering = ('name',)
def get_absolute_url(self):
return urllib.parse.urljoin(settings.URL_ROOT, reverse('surveyscansingle', kwargs={"path":re.sub("#", "%23", self.survexscansfolder.walletname), "file":self.name}))
return urljoin(settings.URL_ROOT, reverse('surveyscansingle', kwargs={"path":re.sub("#", "%23", self.survexscansfolder.walletname), "file":self.name}))
def __str__(self):
return "Survey Scan Image: " + str(self.name) + " in " + str(self.survexscansfolder)

View File

@ -7,6 +7,6 @@ class Redirect(models.Model):
class EntranceRedirect(models.Model):
originalURL = models.CharField(max_length=200)
entrance = models.ForeignKey(Entrance)
entrance = models.ForeignKey(Entrance,on_delete=models.CASCADE)
def __str__(self):
return self.entrance.slug