diff options
author | Philip Sargent <philip.sargent@gmail.com> | 2023-10-21 16:22:20 +0300 |
---|---|---|
committer | Philip Sargent <philip.sargent@gmail.com> | 2023-10-21 16:22:20 +0300 |
commit | e7a0c57330a9c3808531b4d401d0cedf0f0c0638 (patch) | |
tree | 83eea4cf4da7a90b1f9062bf1988ef45f9d3ef5c /core/models | |
parent | 24029be7d3406e4c3ce7790c066b4ad6033c4202 (diff) | |
download | troggle-e7a0c57330a9c3808531b4d401d0cedf0f0c0638.tar.gz troggle-e7a0c57330a9c3808531b4d401d0cedf0f0c0638.tar.bz2 troggle-e7a0c57330a9c3808531b4d401d0cedf0f0c0638.zip |
wallets & caves now many:many
Diffstat (limited to 'core/models')
-rw-r--r-- | core/models/caves.py | 2 | ||||
-rw-r--r-- | core/models/wallets.py | 32 |
2 files changed, 32 insertions, 2 deletions
diff --git a/core/models/caves.py b/core/models/caves.py index e077055..9d98e22 100644 --- a/core/models/caves.py +++ b/core/models/caves.py @@ -88,7 +88,7 @@ class Cave(TroggleModel): url = models.CharField(max_length=300, blank=True, null=True, unique = True) class Meta: - # we do not enforce uniqueness at the db level as that causes confusing errors for users. + # we do not enforce uniqueness at the db level as that causes confusing errors for newbie maintainers # unique_together = (("area", "kataster_number"), ("area", "unofficial_number")) ordering = ("kataster_code", "unofficial_number") diff --git a/core/models/wallets.py b/core/models/wallets.py index bae919a..3f59da0 100644 --- a/core/models/wallets.py +++ b/core/models/wallets.py @@ -10,6 +10,8 @@ from django.conf import settings from django.db import models from django.urls import reverse +from troggle.core.views.caves import get_cave_leniently + # from troggle.core.models.survex import SurvexBlock # from troggle.core.models.troggle import DataIssue # circular import. Hmm @@ -74,12 +76,15 @@ archaic_wallets = [ class Wallet(models.Model): """We do not keep the JSON values in the database, we query them afresh each time, but we may change this if we need to do a Django query on e.g. personame + + ManyToMany field uses modern Django: a hidden Class, unlike CaveAndEntrances which is explict and visible. """ fpath = models.CharField(max_length=200) walletname = models.CharField(max_length=200) walletdate = models.DateField(blank=True, null=True) walletyear = models.DateField(blank=True, null=True) + caves = models.ManyToManyField("Cave", related_name="wallets") class Meta: ordering = ("walletname",) @@ -139,7 +144,31 @@ class Wallet(models.Model): from troggle.core.models.troggle import DataIssue DataIssue.objects.update_or_create(parser="wallets", message=message, url=wurl) return waldata - + + def allcaves(self): + """Reads all the JSON data just to get the JSON date.""" + if not (jsondata := self.get_json()): # WALRUS + print(f"Failed to read JSON file {self}") + return None + cavelist = jsondata["cave"] + if type(cavelist) is list: + for i in cavelist: + if i != "": + i = i.replace("/", "-") + caveobject = get_cave_leniently(i) + self.caves.add(caveobject) # new many-to-many field + else: + # either single cave or the square barckets have been removed and it s a singoe string + ids = cavelist.split(",") + for i in ids: + j = i.replace("'","").replace("/", "-").strip('[] "') + if i != "": + try: + caveobject = get_cave_leniently(j) # may fail if garbage value ,e.g. space, in wallet data + self.caves.add(caveobject) + except: + print(f"FAIL adding cave to wallet.caves '{j}'") + pass def year(self): """This gets the year syntactically without opening and reading the JSON""" if len(self.walletname) < 5: @@ -180,6 +209,7 @@ class Wallet(models.Model): self.save() return self.walletdate + # for gods sake redo this, it parse JSON twice every time.. def people(self): if not self.get_json(): return None |