summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_treatments.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models_treatments.py')
-rw-r--r--archaeological_finds/models_treatments.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index 90badcd35..d8d51e28c 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -90,6 +90,8 @@ class Treatment(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
"upstream_cached_label": _(u"Upstream find"),
}
IMAGE_PREFIX = 'treatment'
+ # extra keys than can be passed to save method
+ EXTRA_SAVED_KEYS = ('items', 'user')
SLUG = 'treatment'
label = models.CharField(_(u"Label"), blank=True, null=True,
max_length=200)
@@ -308,9 +310,10 @@ class FindUpstreamTreatments(AbsFindTreatments):
WITH RECURSIVE rel_tree AS (
SELECT id AS find_id, upstream_treatment_id, downstream_treatment_id,
1 AS level,
- array[upstream_treatment_id] AS path_info
+ ARRAY[]::integer[] AS path_info
FROM archaeological_finds_find
- WHERE upstream_treatment_id is null
+ WHERE upstream_treatment_id is NULL AND
+ downstream_treatment_id is NOT NULL
UNION ALL
SELECT c.id AS find_id, c.upstream_treatment_id,
c.downstream_treatment_id,
@@ -318,8 +321,10 @@ class FindUpstreamTreatments(AbsFindTreatments):
FROM archaeological_finds_find c
JOIN rel_tree p
ON c.upstream_treatment_id = p.downstream_treatment_id
- AND c.upstream_treatment_id !=
- ALL(p.path_info[0:array_upper(p.path_info, 1)-1])
+ AND (p.path_info = ARRAY[]::integer[] OR
+ NOT (c.upstream_treatment_id =
+ ANY(p.path_info[0:array_upper(p.path_info, 1)-1]))
+ )
)
SELECT DISTINCT find_id, path_info, level
FROM rel_tree ORDER BY find_id;
@@ -362,9 +367,10 @@ class FindDownstreamTreatments(AbsFindTreatments):
WITH RECURSIVE rel_tree AS (
SELECT id AS find_id, downstream_treatment_id, upstream_treatment_id,
1 AS level,
- array[downstream_treatment_id] AS path_info
+ ARRAY[]::integer[] AS path_info
FROM archaeological_finds_find
- WHERE downstream_treatment_id is null
+ WHERE downstream_treatment_id is NULL AND
+ upstream_treatment_id is NOT NULL
UNION ALL
SELECT c.id AS find_id, c.downstream_treatment_id,
c.upstream_treatment_id,
@@ -372,8 +378,10 @@ class FindDownstreamTreatments(AbsFindTreatments):
FROM archaeological_finds_find c
JOIN rel_tree p
ON c.downstream_treatment_id = p.upstream_treatment_id
- AND c.downstream_treatment_id !=
- ALL(p.path_info[0:array_upper(p.path_info, 1)-1])
+ AND (p.path_info = ARRAY[]::integer[] OR
+ NOT (c.downstream_treatment_id =
+ ANY(p.path_info[0:array_upper(p.path_info, 1)-1]))
+ )
)
SELECT DISTINCT find_id, path_info, level
FROM rel_tree ORDER BY find_id;