【问题标题】:Django ternary relationshipsDjango 三元关系
【发布时间】:2016-01-28 00:55:55
【问题描述】:

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

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

货币在一个只有“名称”字段的表中。 ID : 1 名称 : EUR

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

为此,我通常会在另一个表中使用三元组,比如 Balance。余额将有:钱包 ID:1,货币 ID:1,价值:50

我想在这里做正确的事,但我不太确定如何进行。

谢谢

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:
    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 关系,那么它在哪里并不重要。但是如果你有一个用户的多个钱包,我想你应该弄清楚为什么userWallet 中,对吧?

    【讨论】:

    • 谢谢,这就是我的想法。你能解释一下为什么钱包和用户之间的关系不是用用户模型中的钱包字段而不是钱包模型中的用户字段来建模的吗?另外,小细节,Currency 是一个表格,所以我将使用:currency = models.ForeignKey(Currency) 而不是 CharField
    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 2011-03-18
    • 2012-05-22
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多