我对 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)
但是,如果您有很多货币,请选择模型。
如果您在Wallet
和User
之间使用OneOnOne
关系,那么它在哪里并不重要。但是,如果您为一个用户拥有多个钱包,我认为您应该弄清楚为什么 user
位于 Wallet
中,对吗?
关于python - Django 三元关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35042813/