summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/forms.py3
-rw-r--r--core/models/caves.py41
-rw-r--r--core/views/caves.py31
3 files changed, 53 insertions, 22 deletions
diff --git a/core/forms.py b/core/forms.py
index e2124f1..d1156cb 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -105,7 +105,7 @@ class CaveForm(ModelForm):
def clean(self):
- cleaned_data = super(CaveForm, self).clean()
+ cleaned_data = super(CaveForm, self).clean() # where is this code hidden? How does this work??
if self.data.get("kataster_number") == "" and self.data.get("unofficial_number") == "":
self._errors["unofficial_number"] = self.error_class(
["Either the kataster or unoffical number is required."]
@@ -226,6 +226,7 @@ class EntranceLetterForm(ModelForm):
Nb. The relationship between caves and entrances has historically been a many to many relationship.
With entrances gaining new caves and letters when caves are joined.
"""
+ entranceletter = forms.CharField(required=False, widget=forms.TextInput(attrs={"size": "2"}))
class Meta:
model = CaveAndEntrance
diff --git a/core/models/caves.py b/core/models/caves.py
index 0cfdd8e..4d268e5 100644
--- a/core/models/caves.py
+++ b/core/models/caves.py
@@ -64,20 +64,21 @@ class CaveAndEntrance(models.Model):
entrances in one form.
CASCADE means that if the cave or the entrance is deleted, then this CaveAndEntrance
is deleted too
+ NOT NEEDED anymore if we insist that cave:entrances have 1:n multiplicity.
"""
cave = models.ForeignKey("Cave", on_delete=models.CASCADE)
entrance = models.ForeignKey("Entrance", on_delete=models.CASCADE)
- entrance_letter = models.CharField(max_length=20, blank=True, null=True)
+ entranceletter = models.CharField(max_length=20, blank=True, null=True)
class Meta:
- unique_together = [["cave", "entrance"], ["cave", "entrance_letter"]]
- ordering = ["entrance_letter"]
+ unique_together = [["cave", "entrance"], ["cave", "entranceletter"]]
+ ordering = ["entranceletter"]
def __str__(self):
- return str(self.cave) + str(self.entrance_letter)
+ return str(self.cave) + str(self.entranceletter)
# class CaveSlug(models.Model):
-# moved to models/logbooks.py to avoid cyclic import problem
+# moved to models/logbooks.py to avoid cyclic import problem. No I don't know why either.
class Cave(TroggleModel):
# too much here perhaps,
@@ -208,8 +209,8 @@ class Cave(TroggleModel):
rs = []
res = ""
for e in CaveAndEntrance.objects.filter(cave=self):
- if e.entrance_letter:
- rs.append(e.entrance_letter)
+ if e.entranceletter:
+ rs.append(e.entranceletter)
rs.sort()
prevR = ""
n = 0
@@ -246,7 +247,9 @@ class Cave(TroggleModel):
return
def file_output(self):
- filepath = Path(os.path.join(settings.CAVEDESCRIPTIONS, self.filename))
+ """This produces the content which wll be re-saved as the cave_data html file.
+ """
+ filepath = Path(settings.CAVEDESCRIPTIONS, self.filename)
t = loader.get_template("dataformat/cave.xml")
now = datetime.now(timezone.utc)
@@ -306,7 +309,7 @@ class Entrance(TroggleModel):
url = models.CharField(max_length=300, blank=True, null=True)
class Meta:
- ordering = ["caveandentrance__entrance_letter"]
+ ordering = ["caveandentrance__entranceletter"]
def __str__(self):
return str(self.slug)
@@ -325,6 +328,26 @@ class Entrance(TroggleModel):
else:
return None
+ def singleletter(self):
+ """Used in template/dataformat/cave.xml to write out a replacement cave_data file
+ why is this not working?
+ """
+ cavelist = self.cavelist
+ try:
+ first = cavelist[0]
+ ce = CaveAndEntrance.objects.get(entrance=self, cave=first)
+ except:
+ # will fail if no caves in cavelist or if the cave isnt in the db
+ return "Z"
+ print(f"singleletter() access for first cave in {cavelist=}")
+ if ce.entranceletter == "":
+ print(f"### BLANK LETTER")
+ return "Y"
+ else:
+ letter = ce.entranceletter
+ print(f"### LETTER {letter}")
+ return letter
+
def exact_location(self):
return self.single(self.exact_station)
diff --git a/core/views/caves.py b/core/views/caves.py
index 1c07fda..445d6c6 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -442,7 +442,7 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
entrance = None
if entslug:
- # print(f"{caveslug=} {entslug=} {path=}")
+ print(f"{caveslug=} {entslug=} {path=}")
caveAndEntrance = CaveAndEntrance.objects.get(entrance=entrance, cave=cave)
entlettereditable = False
else:
@@ -450,15 +450,17 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
entlettereditable = True
if request.POST:
+ print(f"Online edit of entrance {entrance.slug}")
form = EntranceForm(request.POST, instance=entrance)
entletter = EntranceLetterForm(request.POST, instance=caveAndEntrance)
if form.is_valid() and entletter.is_valid():
entrance = form.save(commit=False)
- entrance_letter = entletter.save(commit=False)
- # print(f"- POST {caveslug=} {entslug=} {path=}")
+ entranceletter = entletter.save(commit=False)
+ print(f"- POST {caveslug=} {entslug=} {entranceletter=} {entletter.cleaned_data['entranceletter']=} {path=}")
if entslug is None:
- if entletter.cleaned_data["entrance_letter"]:
- slugname = cave.slug() + entletter.cleaned_data["entrance_letter"]
+ if entletter.cleaned_data["entranceletter"]:
+ slugname = cave.slug() + entletter.cleaned_data["entranceletter"]
+ print(f"- POST letter {entletter.cleaned_data['entranceletter']=}")
else:
slugname = cave.slug()
entrance.slug = slugname
@@ -469,26 +471,31 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
entrance.cached_primary_slug = entslug
entrance.filename = entslug + ".html"
entrance.save()
- entrance_letter.entrance = entrance
- entrance_letter.save()
+ entranceletter.entrance = entrance
+ entranceletter.save()
entrance_file = entrance.file_output()
- # print(f"Online edit of entrance {entrance.slug}")
cave_file = cave.file_output()
+
+ print(f"- POST WRITE letter {entranceletter}")
write_and_commit([entrance_file, cave_file], f"Online edit of entrance {entrance.slug}")
return HttpResponseRedirect("/" + cave.url)
else: # GET the page, not POST, or if either of the forms were invalid when POSTed
+ print(f"ENTRANCE in db: entranceletter = '{caveAndEntrance.entranceletter}'")
if entrance:
# re-read entrance data from file.
filename = str(entrance.slug +".html")
- read_entrance(filename, ent=entrance)
+ ent = read_entrance(filename, ent=entrance)
+ print(f"ENTRANCE from file: entranceletter = '{caveAndEntrance.entranceletter}'")
form = EntranceForm(instance=entrance)
if entslug is None:
entletter = EntranceLetterForm()
+ print(f" Getting entletter from EntranceLetterForm")
else:
- entletter = caveAndEntrance.entrance_letter
+ entletter = caveAndEntrance.entranceletter
+ print(f"{entletter=}")
else:
form = EntranceForm()
entletter = EntranceLetterForm()
@@ -508,14 +515,14 @@ def edit_entrance(request, path="", caveslug=None, entslug=None):
def ent(request, cave_id, ent_letter):
cave = Cave.objects.filter(kataster_number=cave_id)[0]
- cave_and_ent = CaveAndEntrance.objects.filter(cave=cave).filter(entrance_letter=ent_letter)[0]
+ cave_and_ent = CaveAndEntrance.objects.filter(cave=cave).filter(entranceletter=ent_letter)[0]
return render(
request,
"entrance.html",
{
"cave": cave,
"entrance": cave_and_ent.entrance,
- "letter": cave_and_ent.entrance_letter,
+ "letter": cave_and_ent.entranceletter,
},
)