diff --git a/fernet_fields/fields.py b/fernet_fields/fields.py index 701f170..1f8bc57 100644 --- a/fernet_fields/fields.py +++ b/fernet_fields/fields.py @@ -19,6 +19,7 @@ 'EncryptedDateField', 'EncryptedDateTimeField', 'EncryptedBinaryField', + 'EncryptedJSONField', ] @@ -76,8 +77,10 @@ def get_db_prep_save(self, value, connection): def from_db_value(self, value, expression, connection, *args): if value is not None: - value = bytes(value) - return self.to_python(force_text(self.fernet.decrypt(value))) + value = self.to_python(force_text(self.fernet.decrypt(bytes(value)))) + return super( + EncryptedField, self + ).from_db_value(value, expression, connection, *args) @cached_property def validators(self): @@ -134,6 +137,8 @@ class EncryptedDateTimeField(EncryptedField, models.DateTimeField): class EncryptedBinaryField(EncryptedField, models.BinaryField): - def from_db_value(self, value, expression, connection, *args): - if value is not None: - return self.to_python(self.fernet.decrypt(bytes(value))) + pass + + +class EncryptedJSONField(EncryptedField, models.JSONField): + pass diff --git a/fernet_fields/test/models.py b/fernet_fields/test/models.py index dd376cb..b50d4f1 100644 --- a/fernet_fields/test/models.py +++ b/fernet_fields/test/models.py @@ -29,3 +29,7 @@ class EncryptedDateTime(models.Model): class EncryptedNullable(models.Model): value = fields.EncryptedIntegerField(null=True) + + +class EncryptedJSON(models.Model): + value = fields.EncryptedJSONField() diff --git a/fernet_fields/test/test_fields.py b/fernet_fields/test/test_fields.py index cf52489..636c59e 100644 --- a/fernet_fields/test/test_fields.py +++ b/fernet_fields/test/test_fields.py @@ -68,6 +68,7 @@ def test_get_integer_field_validators(self): (models.EncryptedEmail, ['a@example.com', 'b@example.com']), (models.EncryptedInt, [1, 2]), (models.EncryptedDate, [date(2015, 2, 5), date(2015, 2, 8)]), + (models.EncryptedJSON, [{'test': 1}, {'test': 1}]), ( models.EncryptedDateTime, [datetime(2015, 2, 5, 15), datetime(2015, 2, 8, 16)],