我正在尝试将特定投资组合中的所有资产显示在页面上。
我需要知道: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
SQL我想用ORM编写:
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.
答案 0 :(得分:0)
投资组合与资产之间的关系是多对多的。您应该明确定义,并完全删除PortfolioAsset模型(Django将为您创建一个等效的m2m连接表)。
class Portfolio(models.Model):
assets = models.ManyToManyField("Asset")
(注意,惯例是对模型使用单数名称,而不是复数。)
完成后,您根本不需要额外的方法:您只需通过portfolio.assets.all()
从投资组合中访问资产即可。或者,在模板中:
{% for asset in portfolio.assets.all %}
{{ asset.ticker }}
{% endfor %}