В настоящее время я работаю над разработкой базы данных и системы 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)
Таким образом, вы можете не только отслеживать, какой портфель содержит какие монеты, но и покупать все исторические позиции.
Комментариев нет:
Отправить комментарий