diff options
Diffstat (limited to 'core/views/caves.py')
-rw-r--r-- | core/views/caves.py | 39 |
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): |