是否存在可以覆盖的方法,只有在从数据库加载字段时才会调用该方法。
我有一个来自遗留表的加密字段,(没有前缀或识别格式,可以可靠地用于确定它是否加密。)
我的解密代码无法进入to_python函数,因为它不仅在从数据库加载时被调用。
更糟糕的是,我想使解密和加密变得懒惰,因此除非需要,否则我不必调用解密/加密。 (加密代码是ASP经典中的一种奇怪的AES风格,所以我创建了一个我可以从python调用的asp服务。而且速度很慢)我用django的懒函数来创建一个很好的decrypt_lazy函数但是却无法知道如果价值是加密的,我就会被卡住。
所以重申一下我的主要问题是......我是否可以在自定义模型字段上使用方法或钩子,仅当值来自数据库时才用于处理值。再次to_python对我来说不起作用,因为它被调用并从其他地方传递值。
答案 0 :(得分:3)
当您需要字段的解密值时,您可以简单地使用@property
方法 -
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
pin = models.CharField(max_length=30)
@property
def pin_decrypted(self):
# decrypt self.pin and return
return magic_decrypt_method(self.pin)
现在,您可以访问person.pin
或person.pin_decrypted
。