В настоящее время я работаю над разработкой базы данных и системы 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
Теперь в идеале у меня было бы что-то вроде coins = list of Coins modelтого, если бы я использовал java для создания объектов, но, поскольку это для базы данных и в Django, я не уверен, как мне связать их.
Я видел связанные объекты, но не понял объяснения моей проблемы. Как мне настроить эти модели? Спасибо.
Решение проблемы
Похоже, вы хотите иметь несколько 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
Затем вы можете добавить свойство в портфолио:
class Portfolio(models.Model):
name = models.CharField(max_length=250)
@property
def coins(self):
return Investment.objects.filter(portfolio=self)
Таким образом, вы можете не только отслеживать, какой портфель содержит какие монеты, но и покупать все исторические позиции.
Комментариев нет:
Отправить комментарий