Skip to content

Commit 13578ab

Browse files
committed
Add queries key to encrypted fields map
1 parent 534da6b commit 13578ab

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

django_mongodb_backend/fields/encryption.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@
33

44
class EncryptedCharField(models.CharField):
55
encrypted = True
6+
queries = []
7+
8+
def __init__(self, *args, **kwargs):
9+
self.queries = kwargs.pop("queries", [])
10+
super().__init__(*args, **kwargs)

django_mongodb_backend/schema.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,17 @@ def _get_encrypted_fields_map(self, model):
448448
fields = model._meta.fields
449449
return {
450450
"fields": [
451-
{"path": field.name, "bsonType": field.db_type(conn)}
451+
{
452+
"path": field.name,
453+
"bsonType": field.db_type(conn),
454+
# Specify queries in the field definition as a list of query
455+
# types e.g. queries=["equality", "range"]
456+
**(
457+
{"queries": [{"queryType": query} for query in field.queries]}
458+
if hasattr(field, "queries") and field.queries
459+
else {}
460+
),
461+
}
452462
for field in fields
453463
if getattr(field, "encrypted", False)
454464
]

tests/encryption_/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
class Person(EncryptedModel):
88
name = models.CharField("name", max_length=100)
9-
ssn = EncryptedCharField("ssn", max_length=11)
9+
ssn = EncryptedCharField("ssn", max_length=11, queries=["equality"])
10+
ssn2 = EncryptedCharField("ssn", max_length=11, queries=["equality"])
1011

1112
def __str__(self):
1213
return self.name

0 commit comments

Comments
 (0)