我正在尝试将特定资产组合中的所有资产显示在页面上。
我需要知道:A)。如何获得投资组合的主键,B)。如何在代码中编写联接,以及C)。如果我什至以正确的方式解决此问题(另一个CBV或FBV是否更合适,或者get_assets()函数正常吗?)。
数据库设置:
class Portfolios(models.Model):
#code
class PortfoliosAssets(models.Model):
portfolio = models.ForeignKey(Portfolios)
asset = models.ForeignKey(Assets)
class Assets(models.Model):
#code
我想用ORM编写的SQL:
SELECT A.ticker
FROM assets A
INNER JOIN portfolios_assets PA ON PA.asset = A.id
WHERE PA.portfolio = --portfolio_pk
代码:
class ShowPortfolios(DetailView):
model = Portfolios
template_name = 'show_portfolios.html'
def get_assets(self):
#obviously not how to get the portfolios pk or columns from the ASSETS table.
assets = PortfoliosAssets.objects.get(portfolio=portfolio_pk)
for asset in assets:
#run some query to get each asset's info but this seems obviously wrong.
投资组合和资产之间的关系是多对多的。您应该明确定义它,并完全删除PortfolioAsset模型(Django将为您创建一个等效的m2m连接表)。
class Portfolio(models.Model):
assets = models.ManyToManyField("Asset")
(请注意,约定是对模型使用单数名称,而不是复数。)
完成后,您根本不需要任何其他方法:您只需通过即可从投资组合访问资产portfolio.assets.all()
。或者,在模板中:
{% for asset in portfolio.assets.all %}
{{ asset.ticker }}
{% endfor %}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句