Python 从同一模型中的其他类获取模型属性
如何获得同一模型中另一类的价值?Python 从同一模型中的其他类获取模型属性,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,如何获得同一模型中另一类的价值? 我还可以使用属性吗? 我想在Stats类中使用Finance.net_income和Finance.net_margin。我试着找一个anwser,但我找不到,我也是django的新手 class Stats(models.Model): stock = models.ForeignKey(Stock, on_delete=models.CASCADE) shares_outstanding = models.FloatField(default
我还可以使用属性吗? 我想在Stats类中使用Finance.net_income和Finance.net_margin。我试着找一个anwser,但我找不到,我也是django的新手
class Stats(models.Model):
stock = models.ForeignKey(Stock, on_delete=models.CASCADE)
shares_outstanding = models.FloatField(default=0)
@property
def earnings_per_share(self):
####### ISSUE IS HERE #####
return Finance.net_income / self.shares_outstanding
class Finance(models.Model):
stock = models.ForeignKey(Stock, on_delete=models.CASCADE)
total_revenue = models.FloatField(default=0)
operating_income = models.FloatField(default=0)
date = models.DateField(null=True, blank=True)
net_income = models.FloatField(default=0)
cash = models.FloatField(default=0)
total_debt = models.FloatField(default=0)
@property
def operating_margin(self):
if self.total_revenue:
now = (self.operating_income / self.total_revenue)*100
else:
now = 0
return now
@property
def net_margin(self):
if self.total_revenue:
now = (self.net_income / self.total_revenue)*100
else:
now = 0
return now
试着这样做:
@property
def earnings_per_share(self):
total_earnings_per_share = 0
for finance in self.stock.finance_set.all():
total_earnings_per_share += finance.net_income / self.shares_outstanding
return total_earnings_per_share
好的,你不会得到一个金融实例,因为它是金融和股票之间的外键,这意味着一只股票可以有多个金融。如果你想用与
Stat
s对象的Stock
相同的Stock
计算金融
的总和,您可以使用以下公式进行计算:
from django.db.models import Sum
@property
def earnings_per_share(self):
return Finance.objects.filter(
stock_id=self.stock_id
).aggregate(
total=Sum('net_income')
)['total'] / self.shares_outstanding
如果没有所有Stats
对象都有一个或多个Finance
对象,那么Sum
将返回None
(NULL
),在这种情况下,我们可能希望返回0
。我们可以使用该功能来实现此目的:
from django.db.models import Coalesce, Sum, Value
@property
def earnings_per_share(self):
return Finance.objects.filter(
stock__stats=self
).aggregate(
total=Coalesce(Sum('net_income'), Value(0))
)['total'] / self.shares_outstanding
从django.db.models导入合并、求和、值
@财产
def每股收益(自身):
return Finance.objects.filter(
库存统计=自我
).合计(
合计=合并(总和(“净收入”),价值(0))
)['total']/self.shares\u pensible
一个Stats
对象与Finance
对象在这里是如何关联的?在属性中每股收益你需要获得模型Finance
的一个实例,并且一切都很好。两个类都在同一个模型中,那么我如何在其中获得一个实例呢?完美,我如何获得最新的财务信息?按日期排序是的,使用order\u by(“-date”)[0]
:)或使用
from django.db.models import Coalesce, Sum, Value
@property
def earnings_per_share(self):
return Finance.objects.filter(
stock__stats=self
).aggregate(
total=Coalesce(Sum('net_income'), Value(0))
)['total'] / self.shares_outstanding