From 5dc6c153c0f9c4954cbabf6d0e807c5f0190404d Mon Sep 17 00:00:00 2001 From: Andrew Medeiros Date: Thu, 9 Apr 2026 15:34:25 -0400 Subject: [PATCH] Fix EncryptedBooleanField storing false as null --- package_test/tests.py | 13 +++++++++++++ src/encrypted_fields/fields.py | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/package_test/tests.py b/package_test/tests.py index abeb65a..f1e7a4a 100644 --- a/package_test/tests.py +++ b/package_test/tests.py @@ -195,6 +195,19 @@ class FieldTest(TestCase): with pytest.raises(ValidationError): model.save() + + def test_encrypted_boolean_field_preserves_true_false_and_none(self) -> None: + true_obj = TestModel.objects.create(boolean=True) + false_obj = TestModel.objects.create(boolean=False) + none_obj = TestModel.objects.create(boolean=None) + + true_obj.refresh_from_db() + false_obj.refresh_from_db() + none_obj.refresh_from_db() + + assert true_obj.boolean is True + assert false_obj.boolean is False + assert none_obj.boolean is None def test_json_field_encrypted(self) -> None: dict_values = { diff --git a/src/encrypted_fields/fields.py b/src/encrypted_fields/fields.py index 33a0622..77984f8 100644 --- a/src/encrypted_fields/fields.py +++ b/src/encrypted_fields/fields.py @@ -174,7 +174,11 @@ class EncryptedEmailField(EncryptedFieldMixin, models.EmailField): class EncryptedBooleanField(EncryptedFieldMixin, models.BooleanField): - pass + def get_prep_value(self, value: _TypeAny) -> _TypeAny: + value = models.BooleanField.get_prep_value(self, value) + if value is None: + return None + return self.f.encrypt(str(value).encode("utf-8")).decode("utf-8") class EncryptedJSONField(EncryptedFieldMixin, models.JSONField):