first commit
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
from ..connection import connect
|
||||
from ..slugify import slugify
|
||||
from ..definitions.definitions_referencing import definitions_referencing
|
||||
from ..definitions.get_definition import get_definition
|
||||
|
||||
|
||||
def rows_referencing(slug, definition_id, row_id):
|
||||
"""Pour l'écran de suppression d'une ligne : liste, pour chaque objet
|
||||
qui a une relation vers l'objet de cette ligne, combien de ses lignes
|
||||
pointent vers CETTE ligne précise — pour avertir avant une suppression
|
||||
qui laisserait des relations orphelines (aucune suppression en cascade
|
||||
n'est faite automatiquement, par sécurité)."""
|
||||
refs = []
|
||||
for d in definitions_referencing(slug, definition_id):
|
||||
full = get_definition(slug, d["id"])
|
||||
for f in full["fields"]:
|
||||
if f["type"] == "relation" and f["relation_definition_id"] == definition_id:
|
||||
col = slugify(f["name"]).replace("-", "_") + "_id"
|
||||
conn = connect(slug)
|
||||
count = conn.execute(
|
||||
f"SELECT COUNT(*) AS c FROM {full['table_name']} WHERE {col} = ?", (row_id,)
|
||||
).fetchone()["c"]
|
||||
conn.close()
|
||||
if count:
|
||||
refs.append({"definition_name": full["name"], "field_name": f["name"], "count": count})
|
||||
return refs
|
||||
Reference in New Issue
Block a user