python - Django 三元关系

标签 python django django-rest-framework

我对 Django 还很陌生,在为这个特定问题创建正确的模型时遇到了困难。

我有用户,他们拥有一个“钱包”。该钱包应该是货币/值(value)的列表。

货币位于只有一个“名称”字段的表中。 ID:1 姓名:欧元

我希望我的钱包是这样的:货币:欧元,值(value):0,货币:美元,值(value):1000

为此,我通常将三元与另一个表(例如 Balance)一起使用。余额将包含:钱包 ID:1、货币 ID:1、值(value):50

我想在这里做正确的事情,但我不太确定如何继续。

谢谢

最佳答案

Class Wallet(models.Model):
    # if a user has only one wallet
    user = models.OneToOneField('User')
    # if a user has multiple wallets
    # user = models.ForeignKey('User')

class Balance(models.Model):
    currency = models.CharField(max_length=10)
    value    = models.DecimalField()
    wallet   = models.ForeignKey('Wallet')

# to get a user's wallet:
user_wallet = user.wallet
# get all balances
user_balance = user.wallet.balance_set.all()

编辑:

currency 本身不必是一个模型,因为其中没有那么多货币。您还可以避免在查询时加入额外的表。在 CharField 上使用 choices 来代替:

CURRENCIES = (
    (u'USD', u'US Dollars'),
    (u'EUR', u'Euro'),
    # ...
)

currency = models.CharField(max_length=3, choices=CURRENCIES)

但是,如果您有很多货币,请选择模型。

如果您在WalletUser之间使用OneOnOne关系,那么它在哪里并不重要。但是,如果您为一个用户拥有多个钱包,我认为您应该弄清楚为什么 user 位于 Wallet 中,对吗?

关于python - Django 三元关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35042813/

相关文章:

python - 使用 Python 抓取英文单词

Django 如何在模板中使用 block

Django Rest框架使用EPOCH时间更新时间

获取带有字段名称关键字的对象时的Django KeyError

Django rest 框架 - 在模型的保存方法中引发了 ValidationError。如何将错误传递给http响应

python - 自定义权限未传递给通用 View django rest

python - 将 PyAudio 升级到最新版本时出错

python - 处理 "large"csv 文件时收到看似随机的 IndexErrors

python - 在写入文件之前删除文件的内容(在 Python 中)?

Django:如何将参数传递给表单