我正在尝试为股票投资组合设计数据库架构。到目前为止,我似乎只使用了一个警告 - 投资组合可以包含两个相同股票的持股。我希望投资组合中的股票具有独特的持股。我是Django的新手,并且无法解决这个问题。
class Stock(models.Model):
"""
All available stocks
"""
symbol = models.CharField(primary_key=True, max_length=4)
class Portfolio(models.Model):
"""
A user's portfolio containing stocks.
"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
usd = models.FloatField(default=0)
stocks = models.ManyToManyField(Stock, blank=True, through='Holding')
class Holding(models.Model):
"""
A holding of a stock in a portfolio.
"""
stock = models.ForeignKey(Stock)
amount = models.FloatField(default=0.0)
portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE)
例如,在管理界面中,我可以使用Portfolio
和Holding
创建amount=20
,然后创建stock='ABC'
。我可以复制同样的控股,但我不能。正确的方法是查找现有的持有并添加到amount
。
答案 0 :(得分:1)
没关系,明白了......
Trick是在中间表中添加unique_together
。它使股票在投资组合中独一无二。
class Holding(models.Model):
"""
A holding of a stock in a portfolio.
"""
stock = models.ForeignKey(Stock)
amount = models.FloatField(default=0.0)
portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE)
class Meta:
unique_together = [('stock', 'portfolio'),]