summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/views/caves.py35
1 files changed, 22 insertions, 13 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index a440589..09e1f7d 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -439,6 +439,7 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
except:
return render(request, "errors/badslug.html", {"badslug": f"for entrance {entslug} - from edit_entrance()"})
else:
+ # a new entrance on a cave
entrance = None
if entslug:
@@ -452,23 +453,22 @@ 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
-
entlettereditable = True
print(f"{entlettereditable=}")
if request.POST:
- print(f"Online edit of entrance {entrance.slug}")
+ print(f"POST Online edit of entrance: '{entrance}' where {cave=}")
form = EntranceForm(request.POST, instance=entrance)
- entletter = EntranceLetterForm(request.POST, instance=caveAndEntrance)
- if form.is_valid() and entletter.is_valid():
+ entletterform = EntranceLetterForm(request.POST, instance=caveAndEntrance)
+ if form.is_valid() and entletterform.is_valid():
entrance = form.save(commit=False)
- entranceletter = entletter.save(commit=False)
- print(f"- POST {caveslug=} {entslug=} {entranceletter=} {entletter.cleaned_data['entranceletter']=} {path=}")
+ ce = entletterform.save(commit=False)
+ print(f"- POST {caveslug=} {entslug=} {ce=} {entletterform.cleaned_data['entranceletter']=} {path=}")
if entslug is None:
- if entletter.cleaned_data["entranceletter"]:
- slugname = cave.slug() + entletter.cleaned_data["entranceletter"]
- print(f"- POST letter {entletter.cleaned_data['entranceletter']=}")
+ if entletterform.cleaned_data["entranceletter"]:
+ slugname = cave.slug() + entletterform.cleaned_data["entranceletter"]
+ print(f"- POST letter {entletterform.cleaned_data['entranceletter']=}")
else:
slugname = cave.slug()
entrance.slug = slugname
@@ -478,14 +478,23 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
entrance.slug = entslug
entrance.cached_primary_slug = entslug
entrance.filename = entslug + ".html"
- entrance.save()
- entranceletter.entrance = entrance
- entranceletter.save()
+ try:
+ entrance.save()
+ except:
+ # fails with uniqueness constraint failure. Which is on CaveAndEntrance, not just on entrance, which is bizarre.
+ print(f"SAVE EXCEPTION FAIL {entrance=}")
+ print(f"CAVE {cave}")
+ for ce in cave.entrances():
+ print(f"CAVE:{ce.cave} - ENT:{ce.entrance} - LETTER:'{ce.entranceletter}'")
+ raise
+ ce.entrance = entrance
+ ce.save()
entrance_file = entrance.file_output()
cave_file = cave.file_output()
- print(f"- POST WRITE letter {entranceletter}")
+
+ 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)