python - 在 Django 中将一个模型与一组另一个模型链接起来

标签 python django database

我目前正在开发一个数据库和 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 的,所以我不确定我如何应该将两者联系起来。

我看过相关对象,但不明白对我的问题的解释。我应该如何设置这些模型?谢谢。

最佳答案

听起来您想拥有许多 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)

通过这种方式,您不仅可以跟踪哪个投资组合持有哪些硬币,还可以购买整个历史头寸。

关于python - 在 Django 中将一个模型与一组另一个模型链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158574/

相关文章:

php - MySQL Process List - 提高性能 - 锁定问题

python - 如何将多维 h5py 数据集复制到平面一维 Python 列表而不制作任何中间副本?

python - 当我在 for 循环中添加 {% include %} 标签时,元素消失

php - 使用 PHP 将表单中的数据插入 SQLite3 数据库

python - django-summernote 设置配置仅失败语言部分

c# - 使用 HttpClient 通过 HTTP POST windows phone 8.1 上传图像和字符串

mysql - 向数据库中具有特定时间戳的行添加时间

python - 如何将函数的文档字符串放入变量中?

python - 使用 Javascript 更改 Django 模型

python - 从过去 7 天创建 QuerySet 对象