GOOGLE ADS

пятница, 6 мая 2022 г.

Связывание одной модели с набором другой в Django

В настоящее время я работаю над разработкой базы данных и системы 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)

Таким образом, вы можете не только отслеживать, какой портфель содержит какие монеты, но и покупать все исторические позиции.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...