diff options
Diffstat (limited to 'archaeological_finds/models_finds.py')
| -rw-r--r-- | archaeological_finds/models_finds.py | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 360e18393..330dc2f78 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -2613,32 +2613,54 @@ class Find( statement_conditions_list = list( self.statement_conditions.filter(initial=False).order_by("pk").all()) q = self.statement_conditions.order_by("-pk").filter(initial=True) - if q.exists(): - previous = q.all()[0] + has_previous = q.exists() + first_statement_condition = None + if has_previous: + first_statement_condition = previous = q.all()[0] else: # if no initial is set get diff from the find previous = self - for state in statement_conditions_list: + for idx, state in enumerate(statement_conditions_list): diff = {} + initial = {} if not idx else None for field in StatementCondition._meta.get_fields(): attr = field.name if attr in StatementCondition.OVERLOADED_FIELDS: previous_value = getattr(previous, attr) or None value = getattr(state, attr) or None - if previous_value != value: - if value is None or value == "": - value = "-" - diff[field.verbose_name] = value + if previous_value == value: + continue + if value is None or value == "": + value = "-" + diff[field.verbose_name] = value + if initial is None or not first_statement_condition: + continue + if previous_value is None or previous_value == "": + previous_value = "-" + initial[field.verbose_name] = previous_value elif attr in StatementCondition.OVERLOADED_M2M_FIELDS: previous_value = [str(v) for v in getattr(previous, attr).all()] value = [str(v) for v in list(getattr(state, attr).all())] - if previous_value != value: - if value: - diff[field.verbose_name] = " ; ".join(value) - else: - diff[field.verbose_name] = "-" + if previous_value == value: + continue + if value: + diff[field.verbose_name] = " ; ".join(value) + else: + diff[field.verbose_name] = "-" + if initial is None or not first_statement_condition: + continue + if previous_value: + previous_value = " ; ".join(previous_value) + else: + previous_value = "-" + initial[field.verbose_name] = previous_value state.diff = diff previous = state - return list(reversed(statement_conditions_list)) + if initial and first_statement_condition: + first_statement_condition.diff = initial + lst = list(reversed(statement_conditions_list)) + if first_statement_condition: + lst.append(first_statement_condition) + return lst @property def has_packaging_for_current_container(self): |
