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.py50
1 files changed, 36 insertions, 14 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index 1b47c39..616e69f 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -481,26 +481,48 @@ def caveQMs(request, slug):
else:
return render(request,'cave_qms.html', {'cave': cave})
-def qm(request,cave_id,qm_id,year,grade=None, blockname=""):
+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 and for survex-imported QMs,
+ 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.
'''
year=int(year)
-
- 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())
- return render(request,'qm.html', {'qm': qm})
- except QM.DoesNotExist:
- return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
- except MultipleObjectsReturned:
- qm = manyqms.filter(blockname = blockname) # we could still get multiple objects..
- if qm:
+
+ if blockname == 'None':
+ # 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())
return render(request,'qm.html', {'qm': qm})
- else:
+ except QM.DoesNotExist:
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})
+ else:
+ 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})
+ except QM.DoesNotExist:
+ return render(request,'errors/badslug.html', {'badslug': f'{cave_id=} {year=} {qm_id=} {blockname=}'})
+
def get_qms(request, caveslug):
'''Does not crash, but just returns a text list of the entrances for a cave.