python - 在 Django 模型实例中初始化附加对象并传递模型实例
问题描述
一些计算变得太复杂而无法在我的模型中维护,因此我决定将它们移出并将代码分解为几个类和模块。
有一个作为外观的类,我希望在模型实例中可以使用它来将数据传递给它。
它是从模型实例构造的:
class Calculator:
def __init__(self, field1: date, field2: float):
self.field1= field1
self.field2 = field2
@classmethod
def from_django_model(cls, django_model_instance):
field1 = django_model_instance.field1
field2 = float(django_model_instance.field2)
目前我在模型上的每个属性中调用它,如下所示:
class DjangoModel(models.Model):
# initialize the calculator
def calculator(self, group):
return calculator.Calculator.from_django_model(self)
# use it
@cached_property
def calculated_field(self):
try:
return self.calculator().calculation_method
except AttributeError:
return "Field not set!"
我觉得这不是一个好的解决方案,因为现在我在多个方法上多次初始化计算器对象。
我想在模型初始化时构造一次,然后将其传递给模型实例。我尝试使用模型管理器执行此操作,但模型实例不可用。
解决方案
推荐阅读
- c# - 我可以使用 dotnet test --filter 运行所有默认测试以及指定的类别吗?
- python - 使用 For 循环的 Python Win32 AutoFit 列 - 保存最后一个文件时出现问题
- javascript - 当相关变量为空时,如何从查询中排除字段?
- html - 如果未下载,则图像大小不同
- sql-server - Polybase - 将数据类型 VARCHAR 转换为 DATETIME 时出错
- ios - 如何映射出字典数组?
- google-analytics - Adwords 转换引发了谷歌分析与反应
- pytorch - 在 google-collaboratory 中使用 PyTorch 加载模型的问题
- django - 创建子窗体并同时修改父窗体,Django
- ios - 我应该使用 AVFoundation 或 CoreAudio 从文件或缓冲区中解码/转换音频吗?