summaryrefslogtreecommitdiffstats
path: root/core/views/caves.py
diff options
context:
space:
mode:
Diffstat (limited to 'core/views/caves.py')
-rw-r--r--core/views/caves.py39
1 files changed, 21 insertions, 18 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index 616e69f..2a2e5b8 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -485,43 +485,46 @@ def qm(request,cave_id,qm_id,year,grade=None, blockname=None):
'''Reports on one specific QM
Fixed and working July 2022, for both CSV imported QMs
needs refactoring though.
- For survex-imported QMs we are not getting unique objects returned, so the query needs fixing.
+
+ 290 has several QMS with the same number, grade, year (2108) and first 8 chars of the survexblock. This crashes things.
'''
year=int(year)
- if blockname == 'None':
+ if blockname == '':
# CSV import QMs, use old technique
try:
c=getCave(cave_id)
manyqms=c.get_QMs()
- qm=manyqms.get(number=qm_id,found_by__date__year=year, found_by__cave_slug=c.slug())
+ qm=manyqms.get(number=qm_id,expoyear=year)
return render(request,'qm.html', {'qm': qm})
except QM.DoesNotExist:
+ raise
return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
else:
- # survex import QMs, need to disambiguate with blockname
- # slug = f'{str(self.cave)}-{self.found_by.date.year}-{self.blockname}{self.number}{self.grade}'
-
try:
qmslug = f'{cave_id}-{year}-{blockname=}{qm_id}{grade}'
c=getCave(cave_id)
manyqms=c.get_QMs()
- qm=manyqms.get(found_by__date__year=year, blockname=blockname, number=qm_id, grade=grade)
- if qm:
- print(qm, f'{qmslug=}:{cave_id=} {year=} {qm_id=} {blockname=} {qm.expoyear=}')
- return render(request,'qm.html', {'qm': qm})
+ qmqs=manyqms.filter(expoyear=year, blockname=blockname, number=qm_id, grade=grade)
+ if len(qmqs) > 1:
+ for q in qmqs:
+ print(qmqs)
+ message = f'Multiple QMs with the same cave, year, number, grade AND first 8 chars of the survexblock name. Fix this in the survex file(s). {cave_id=} {year=} {qm_id=} {blockname=}'
+ return render(request,'errors/generic.html', {'message': message})
else:
- return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
+ qm=qmqs.get(expoyear=year, blockname=blockname, number=qm_id, grade=grade)
+ if qm:
+ print(qm, f'{qmslug=}:{cave_id=} {year=} {qm_id=} {blockname=} {qm.expoyear=}')
+ return render(request,'qm.html', {'qm': qm})
+ else:
+ raise
+ return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
except MultipleObjectsReturned:
- if len(qm) > 1:
- for q in qm:
- print(qm)
- return render(request,'qm.html', {'qm': qm[0]})
- else:
- return render(request,'qm.html', {'qm': qm})
+ raise
except QM.DoesNotExist:
- return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
+ raise
+ return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
def get_qms(request, caveslug):