首页 > 解决方案 > 在 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!"

我觉得这不是一个好的解决方案,因为现在我在多个方法上多次初始化计算器对象。

我想在模型初始化时构造一次,然后将其传递给模型实例。我尝试使用模型管理器执行此操作,但模型实例不可用。

标签: pythondjango

解决方案


推荐阅读