Django三元关系

时间:2016-01-27 16:29:01

标签: python django django-rest-framework

我是Django的新手,我在为这个特殊问题创建合适的模型时遇到了麻烦。

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

货币位于只有“名称”字段的表格中。 ID:1姓名:EUR

我希望我的钱包如下:货币:欧元,价值:0,货币:美元,价值:1000

为此,我通常使用另一张桌子的三元组,比如说平衡。余额如何:钱包ID:1,货币ID:1,价值:50

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

由于

1 个答案:

答案 0 :(得分:2)

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本身并不一定是模型,因为那里没有那么多货币。您还可以在查询时避免加入其他表。请改用choices上的CharField

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

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

但是,如果你有很多货币,可以选择一个模型。

如果您在OneOnOneWallet之间使用User关系,那么它在哪里无关紧要。但是如果你有一个用户的多个钱包,我认为你应该找出userWallet的原因,对吧?