0

我试图找出一种方法来管理涉及两个单独模型的方法。我目前的方法是创建一个包含每个模型的模型实例的类。这种方法有一些局限性,我想知道是否有更 djangoistic 的方式来做到这一点。例如:

from django.db import models

class Element(models.Model):
    name = models.CharField(max_length=100)
    detail1 = ...
    detail2 = ...

class Portfolio(models.Model):
    name = models.CharField(max_length=100)
    detail1 = ...
    elements = models.ManyToManyField(Element)

class Risk(models.Model):
    name = models.CharField(max_length=100)
    detail1 = ...

class PortfolioRiskAnalysis():
    def __init__(self, portfolio, risk):
        self.portfolio = portfolio
        self.risk = risk

    @property
    def risk_score(self):
        return calculate_risk_score(self.portfolio, self.risk)

由于有大量的投资组合和风险,我避免创建PortfolioRiskAnalysis模型。但是现在,我发现我想生成投资组合风险分析的查询集,按元素过滤,按 risk_score 排序。换句话说,类似:

class PortfolioRiskEvaluation(models.Model):
    portfolio = models.ForeignKey(Portfolio)
    risk = models.ForeignKey(Risk)
    score = models.FloatField()

    class Meta:
        abstract = True
        order_by = ['score']

    def save(self):
        risk_analysis = RiskAnalysis(self.portfolio, self.risk)
        self.score = risk_analysis.risk_score
        super(PortfolioRiskEvaluation, self).save()

这个模型不能解决我的需要,因为抽象模型没有管理器。我试图避免使这个模型成为“真实”模型,因为它很可能变得非常大。有什么想法吗?

4

0 回答 0