Django与加密字段过滤

2 投票
1 回答
2465 浏览
提问于 2025-04-18 07:48

我正在使用django-encrypted-fields来加密数据库中的数据。不过,我想根据用户的条件进行筛选,比如搜索特定名字的客户(搜索词)。但我在这里和其他地方都看到,使用加密字段是无法进行筛选的。所以我在想,是否可以用普通的for循环来遍历每一条数据库记录,看看搜索词是否和你模型中的字段匹配?

比如:

clients = Client.objects.all()
post_data = form.cleaned_data

search_result = []
for client in clients:
    if (post_data['charfield1'].lower() in client.charfield1.lower() and 
        post_data['charfield2'].lower() in client.charfiedl2.lower() and...etc

        search_result.append(client)

我知道这样做效率非常低。但是如果你真的想要添加筛选功能,还有其他方法吗?而且这种方法在处理None值(如果你允许的话)时会有问题,因为如果customer.field是None,你就不能用post_data['field'] in customer.field来判断。所以这是一种需要妥协的情况,对吧?你会怎么处理这种情况呢?

1 个回答

0

从Django 1.7开始,如果你在使用Postgres数据库,可以通过这个包来对加密字段进行筛选:http://django-pgcrypto.readthedocs.org/en/latest/

撰写回答