Неразрешимый вопрос: фильтр по зашифрованным полям Django - PullRequest
0 голосов
/ 01 октября 2019

Я использую библиотеку cryptographic_fields.fields для шифрования некоторых из моих полей, в частности, номера маршрута клиента.

Моя конечная цель , чтобы иметь возможность проверить, если account_number уже используется в других учетных записях.

Вот как выглядит мой model.py:

class Account(models.Model):
    account_number = EncryptedCharField(max_length=20, null=True, blank=True)

Я смотрю, можно ли выполнить фильтрацию по этому полю.

Во время тестирования я создаю 2 учетные записи с номером_счета '123'.

Когда я пытаюсь отфильтровать и получить эти 2 учетные записи по указанному номеру_счета. Я получаю пустой набор запросов.

Account.objects.filter(account_number='123')

Я думаю, что причина, по которой я получаю пустой набор запросов, заключается в том факте, что этот номер счета уже зашифрован.

Я искалв исходном коде и попытался кодировать строку и выполнить поиск с новым значением кодирования.

from cryptographic_fields.fields import get_crypter

CRYPTER = get_crypter()

account_number = CRYPTER.encrypt('123'.encode('utf-8'))

Account.objects.filter(account_number=account_number)

Но это не работает, так как кажется, что CRYPTER выдает новое, другое зашифрованное значение каждый раз, когда я его использую.

...