From b57d0c40ca8adb9bfd4f56d2396e247a60340808 Mon Sep 17 00:00:00 2001 From: Gagaro Date: Thu, 25 Sep 2025 12:22:44 +0200 Subject: [PATCH] Added EncryptedBooleanField --- src/pgcrypto/fields.py | 16 ++++++++++++++++ testapp/fixtures/employees.json | 6 ++++-- testapp/models.py | 2 ++ testapp/tests.py | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/pgcrypto/fields.py b/src/pgcrypto/fields.py index 41bafe4..9cc35f9 100644 --- a/src/pgcrypto/fields.py +++ b/src/pgcrypto/fields.py @@ -260,6 +260,22 @@ def formfield(self, **kwargs): return super().formfield(**defaults) +class EncryptedBooleanField(BaseEncryptedField): + description = _("Boolean") + field_cast = "::boolean" + + def formfield(self, **kwargs): + defaults = {"form_class": forms.BooleanField} + defaults.update(kwargs) + return super().formfield(**defaults) + + def to_python(self, value): + if value in self.empty_values: + return None + unencrypted_value = super().to_python(value) + return unencrypted_value == 'True' + + class EncryptedLookup(Lookup): patterns = { "contains": "%%%s%%", diff --git a/testapp/fixtures/employees.json b/testapp/fixtures/employees.json index 6fb3247..c9e5bc7 100644 --- a/testapp/fixtures/employees.json +++ b/testapp/fixtures/employees.json @@ -4,7 +4,8 @@ "name": "John Smith", "ssn": "999-05-6728", "salary": "52000.00", - "date_hired": "1999-01-23" + "date_hired": "1999-01-23", + "is_vip": false }, "model": "testapp.employee", "pk": 1 @@ -15,7 +16,8 @@ "ssn": "666-27-9811", "salary": "75248.77", "date_hired": "1996-02-28", - "email": "johnson.sally@example.com" + "email": "johnson.sally@example.com", + "is_vip": true }, "model": "testapp.employee", "pk": 2 diff --git a/testapp/models.py b/testapp/models.py index 8a9ffc9..32a19ed 100644 --- a/testapp/models.py +++ b/testapp/models.py @@ -13,6 +13,7 @@ class Employee(models.Model): ) email = pgcrypto.EncryptedEmailField(unique=True, null=True) date_modified = pgcrypto.EncryptedDateTimeField(auto_now=True) + is_vip = pgcrypto.EncryptedBooleanField() def __str__(self): return self.name @@ -30,6 +31,7 @@ class RawEmployee(models.Model): date_hired = models.TextField() email = models.TextField(null=True) date_modified = models.TextField() + is_vip = models.BooleanField() class Meta: db_table = "testapp_employee" diff --git a/testapp/tests.py b/testapp/tests.py index e0bd4d6..d4e5184 100644 --- a/testapp/tests.py +++ b/testapp/tests.py @@ -196,6 +196,7 @@ def test_formfields(self): "date_hired": forms.DateField, "email": forms.EmailField, "date_modified": forms.DateTimeField, + "is_vip": forms.BooleanField, } actual = { f.name: type(f.formfield())