我目前正致力于开发数据库和api系统,用户可以在其中创建包含硬币列表的投资组合。我正在使用django,我到处搜索,但我一直看到外键,但我不确定这是我在这种情况下需要什么。
我想要两个模型,一个用于用户可以查询的投资组合,另一个用户也可以查询的投币模型。但是在投资组合中应该有一个硬币列表。
我知道如何在Java中使用对象但不确定django中的方法。
这是我的模特课:
from django.db import models
class Portfolio(models.Model):
name = models.CharField(max_length=250)
def __str__(self):
return self.name
class Coin(models.Model):
name = models.CharField(max_length=100)
symbol = models.CharField(max_length=5)
price = models.DecimalField(max_digits=20, decimal_places=9)
info = models.TextField()
website = models.TextField()
rank = models.IntegerField()
def __str__(self):
return self.name + " - " + self.symbol
如果我使用java来制作对象,我理想情况下会有类似coins = list of Coins model
的东西,但由于这是用于数据库和Django,我不知道应该如何链接这两者。
我见过相关的对象,但不明白我的问题的解释。
我应该如何设置这些模型?
感谢。
答案 0 :(得分:2)
听起来你想拥有一些Portfolio
个对象,每个对象都可以在Coin
个对象中进行不同的投资。在这种情况下,您需要使用ManyToManyField:
class Portfolio(models.Model):
name = models.CharField(max_length=250)
coins = models.ManyToManyField(Coin)
然后数据库将存储投资组合持有哪个硬币的二维表。
但是,您可以尝试的另一种方法是创建一个单独代表投资的对象:
class Investment(models.Model):
portfolio = models.ForeignKey(Portfolio)
coin = models.ForeignKey(Coin)
bought = models.DateTimeField() # date the investment was made
sold = models.DateTimeField() # date the investment was sold
amount = models.DecimalField() # number of coins held
然后,您可以向Portfolio:
添加属性class Portfolio(models.Model):
name = models.CharField(max_length=250)
@property
def coins(self):
return Investment.objects.filter(portfolio=self)
通过这种方式,您不仅可以跟踪哪个投资组合持有哪些硬币,还可以购买整个历史位置。