From 9ad0f3c3dc455466858489199862c3d7508ce91b Mon Sep 17 00:00:00 2001 From: oarnauru Date: Thu, 12 Jun 2014 16:54:30 +0200 Subject: [PATCH] Load obj to use real name --- dirty_models/fields.py | 4 +-- dirty_models/models.py | 55 ++++++++++++++++-------------- tests/dirty_models/tests_models.py | 6 ++++ 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/dirty_models/fields.py b/dirty_models/fields.py index 17955b6..a06c1fd 100644 --- a/dirty_models/fields.py +++ b/dirty_models/fields.py @@ -69,10 +69,10 @@ def delete_value(self, obj): obj.delete_field_value(self.name) def __get__(self, obj, cls=None): - if self._getter: - return self._getter(self, obj, cls) if obj is None: return self + if self._getter: + return self._getter(self, obj, cls) if self._name is None: raise AttributeError("Field name must be set") return self.get_value(obj) diff --git a/dirty_models/models.py b/dirty_models/models.py index 8b3f96f..3525be8 100644 --- a/dirty_models/models.py +++ b/dirty_models/models.py @@ -104,17 +104,18 @@ def set_field_value(self, name, value): """ Set the value to the field modified_data """ - if self._can_write_field(name): - - if name in self._deleted_fields: - self._deleted_fields.remove(name) - if self._original_data.get(name) == value: - if self._modified_data.get(name): - self._modified_data.pop(name) + obj = self.__class__.get_field_obj(name) + + if self._can_write_field(obj.name): + if obj.name in self._deleted_fields: + self._deleted_fields.remove(obj.name) + if self._original_data.get(obj.name) == value: + if self._modified_data.get(obj.name): + self._modified_data.pop(obj.name) else: - self._modified_data[name] = value + self._modified_data[obj.name] = value self._prepare_child(value) - if name in self._read_only_fields: + if obj.name in self._read_only_fields: try: value.set_read_only(True) except AttributeError: @@ -124,37 +125,40 @@ def get_field_value(self, name): """ Get the field value from the modified data or the original one """ - if name in self._deleted_fields: + obj = self.__class__.get_field_obj(name) + if obj.name in self._deleted_fields: return None - modified = self._modified_data.get(name) + modified = self._modified_data.get(obj.name) if modified is not None: return modified - return self._original_data.get(name) + return self._original_data.get(obj.name) def delete_field_value(self, name): """ Mark this field to be deleted """ - if self._can_write_field(name): - if name in self._modified_data: - self._modified_data.pop(name) + obj = self.__class__.get_field_obj(name) + if self._can_write_field(obj.name): + if obj.name in self._modified_data: + self._modified_data.pop(obj.name) - if name in self._original_data: - self._deleted_fields.append(name) + if obj.name in self._original_data: + self._deleted_fields.append(obj.name) def reset_field_value(self, name): """ Resets value of a field """ - if self._can_write_field(name): - if name in self._modified_data: - del self._modified_data[name] + obj = self.__class__.get_field_obj(name) + if self._can_write_field(obj.name): + if obj.name in self._modified_data: + del self._modified_data[obj.name] - if name in self._deleted_fields: - self._deleted_fields.remove(name) + if obj.name in self._deleted_fields: + self._deleted_fields.remove(obj.name) try: - self._original_data[name].clear_modified_data() + self._original_data[obj.name].clear_modified_data() except (KeyError, AttributeError): pass @@ -162,11 +166,12 @@ def is_modified_field(self, name): """ Returns whether a field is modified or not """ - if name in self._modified_data or name in self._deleted_fields: + obj = self.__class__.get_field_obj(name) + if obj.name in self._modified_data or obj.name in self._deleted_fields: return True try: - return self.get_field_value(name).is_modified() + return self.get_field_value(obj.name).is_modified() except AttributeError: return False diff --git a/tests/dirty_models/tests_models.py b/tests/dirty_models/tests_models.py index cee9dfe..0c3edc0 100644 --- a/tests/dirty_models/tests_models.py +++ b/tests/dirty_models/tests_models.py @@ -134,6 +134,7 @@ class TestExportModel(BaseModel): testField1 = BaseField() testField2 = BaseField() testField3 = BaseField() + test_field4 = BaseField(name="testField4") testFieldModel = ModelField() return TestExportModel() @@ -342,19 +343,24 @@ def test_reset_field_value(self): self.assertEqual(model.testField3, 'c') def test_is_modified_field(self): + model = self._get_test_model_instance() model.testField1 = 'a' model.testField2 = 'b' model.testField3 = 'c' + model.test_field4 = 'd' model.flat_data() self.assertFalse(model.is_modified_field('testField1')) self.assertFalse(model.is_modified_field('testField2')) self.assertFalse(model.is_modified_field('testField3')) + self.assertFalse(model.is_modified_field('test_field4')) model.testField3 = 'cccc' + model.test_field4 = 'dddd' self.assertTrue(model.is_modified_field('testField3')) + self.assertTrue(model.is_modified_field('test_field4')) def test_fields_original_data(self): model = self._get_test_model_instance()