summaryrefslogtreecommitdiffstats
path: root/core/views/caves.py
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@gmail.com>2023-10-11 17:02:11 +0300
committerPhilip Sargent <philip.sargent@gmail.com>2023-10-11 17:02:11 +0300
commit7e1c8797b88c9f5257661007249530c9b7ed594c (patch)
tree2887a2bec3f637e5f53e17258af47c9fdca7d3ad /core/views/caves.py
parent2452fe575282a17498ad25f1731e71bc37e33d2a (diff)
downloadtroggle-7e1c8797b88c9f5257661007249530c9b7ed594c.tar.gz
troggle-7e1c8797b88c9f5257661007249530c9b7ed594c.tar.bz2
troggle-7e1c8797b88c9f5257661007249530c9b7ed594c.zip
fix edit entrance bug
Diffstat (limited to 'core/views/caves.py')
-rw-r--r--core/views/caves.py37
1 files changed, 27 insertions, 10 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index bd1de70..90a8451 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -453,6 +453,9 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
Warning. This uses Django deep magic for multiple forms and the CaveAndEntrance class.
It does save the data into into the database directly, not by parsing the file.
+
+ GET RID of all this entranceletter stuff. Far too overcomplexified.
+ We don't need it. Just the entrance slug is fine, then check uniqueness.
"""
try:
@@ -479,23 +482,35 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
if caveAndEntrance.entranceletter == "" and cave.entrances().count() > 0 :
# this should not be blank on a multiple-entrance cave
- # but it doesn't trigger the entrnce letter form unless entletter has a value
+ # but it doesn't trigger the entrance letter form unless entletter has a value
entlettereditable = True
print(f"{entlettereditable=}")
+ # if the entletter is no editable, then the entletterform does not appear and so is always invalid.
if request.POST:
print(f"POST Online edit of entrance: '{entrance}' where {cave=}")
- form = EntranceForm(request.POST, instance=entrance)
- entletterform = EntranceLetterForm(request.POST, instance=caveAndEntrance)
- if form.is_valid() and entletterform.is_valid():
- entrance = form.save(commit=False)
- ce = entletterform.save(commit=False)
- print(f"- POST {caveslug=} {entslug=} {ce=} {entletterform.cleaned_data['entranceletter']=} {path=}")
+ entform = EntranceForm(request.POST, instance=entrance)
+ if not entlettereditable:
+ entranceletter = caveAndEntrance.entranceletter
+ ce = caveAndEntrance
+ else:
+ entletterform = EntranceLetterForm(request.POST, instance=caveAndEntrance)
+ if entletterform.is_valid():
+ ce = entletterform.save(commit=False)
+ entranceletter = entletterform.cleaned_data["entranceletter"]
+ else:
+ print(f"- POST INVALID {caveslug=} {entslug=} {path=} entletterform invalid.")
+ return render(request, "errors/badslug.html", {"entletter problem in edit_entrances()"})
+ # if entform.is_valid() and entletterform.is_valid():
+ if entform.is_valid():
+ entrance = entform.save(commit=False)
+
+ print(f"- POST {caveslug=} {entslug=} {entranceletter=} {path=}")
if entslug is None:
- if entletterform.cleaned_data["entranceletter"]:
- slugname = cave.slug() + entletterform.cleaned_data["entranceletter"]
- print(f"- POST letter {entletterform.cleaned_data['entranceletter']=}")
+ if entranceletter:
+ slugname = cave.slug() + entranceletter
+ print(f"- POST letter {entranceletter=}")
else:
slugname = cave.slug()
entrance.slug = slugname
@@ -524,6 +539,8 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
print(f"- POST WRITE letter: '{ce}' {entrance=}")
write_and_commit([entrance_file, cave_file], f"Online edit of entrance {entrance.slug}")
return HttpResponseRedirect("/" + cave.url)
+ else: # one of the forms is not valid
+ print(f"- POST INVALID {caveslug=} {entslug=} {path=} entform valid:{entform.is_valid()} entletterform valid:{entletterform.is_valid()}")
else: # GET the page, not POST, or if either of the forms were invalid when POSTed
entletterform = None