From adc2798fbe4d6f465e897428a1a42a8cf604895a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20M=C3=A1tl?= Date: Sun, 14 Oct 2018 20:40:57 +0200 Subject: [PATCH] Fixed changed save value for models without auto generated private key --- chamber/models/__init__.py | 2 +- chamber/models/fields.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/chamber/models/__init__.py b/chamber/models/__init__.py index b16baf3..305862a 100644 --- a/chamber/models/__init__.py +++ b/chamber/models/__init__.py @@ -323,7 +323,7 @@ def _save(self, is_cleaned_pre_save=None, is_cleaned_post_save=None, force_inser origin = self.__class__ - change = bool(self.pk) + change = not self._state.adding kwargs.update(self._get_save_extra_kwargs()) self._call_pre_save(change, self.changed_fields, *args, **kwargs) diff --git a/chamber/models/fields.py b/chamber/models/fields.py index 36474ac..b429daf 100644 --- a/chamber/models/fields.py +++ b/chamber/models/fields.py @@ -212,9 +212,11 @@ def __init__(self, *args, **kwargs): def validate(self, value, model_instance): super(EnumSequenceFieldMixin, self).validate(value, model_instance) if self.enum: - prev_value = model_instance.pk and model_instance.initial_values[self.attname] or None + prev_value = (not model_instance._state.adding and model_instance.initial_values[self.attname]) or None allowed_next_values = self.enum.get_allowed_next_states(prev_value, model_instance) - if self.name in model_instance.changed_fields and value not in allowed_next_values: + + if ((self.name in model_instance.changed_fields or model_instance._state.adding) and + value not in allowed_next_values): raise ValidationError( ugettext('Allowed choices are {}.').format( ', '.join(('{} ({})'.format(*(self.enum.get_label(val), val)) for val in allowed_next_values))))