我正在尝试为库存投资组合设计数据库架构。到目前为止,我的工作似乎与一个警告一起工作 - 一个投资组合可以包含两个股票的同一股票。我希望对投资组合中的股票具有独特性。我是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
,然后使用amount=20
和stock='ABC'
创建Holding
。我可以复制同样的持有,但我不应该这样做。正确的方法是查找现有的持有并添加到amount
。
没事,得到了...
技巧是在中间表中添加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'),]