我的模型中有一些字段,我试图在所有字段上应用加密。每个字段加密取决于同一模型类中其他两个字段的值。我能够实现加密数据。
但我还需要同一类中的其他两个字段来解密函数 def from_db_value(self, value, expression, connection, *args)
返回的其他字段值。
我已阅读the docs和源代码,但我在 from_db_value(self, value, expression, connection, *args)
中没有看到对以下参数的正确解释:
表达式
*args
我想知道我们如何以及在哪里提供这些参数。我们还可以如何使用该功能。我知道该函数应该返回数据库中的值,并将其转换为适当的 python 对象。但我想知道它还能做什么或者我们可以用它做什么?
P.S:是的,我正在尝试制作自定义字段类。
灵感:django-fernet-fields
最佳答案
我不知道你想在兔子洞里走多远,但这也许有帮助。您可能已经发现 from_db_value
在 django.db.models.fields.__init__.py
第 708 行的 Field
类中使用。此处作为一种 Hook 特定数据库模型的值转换的方法。例如,它用于转换为 native PostGreSQL 数组字段。
如果您深入挖掘,您会发现这些转换器由 django.db.models.sql.compiler.py
第 1084 行中的 SQLCompiler
类使用。依次由其下面的 results_iter
调用。
我注意到how-to guide没有提到在方法定义中使用和 *args
参数。所以我不知道它是从哪里来的。
关于python - 实际上无法找到 from_db_value 在 django 源代码中的工作原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60560775/