2016-01-27 3 views
1

Я довольно новичок в Django, и у меня возникают проблемы с созданием подходящих моделей для этой конкретной проблемы.Django trernary relationship

У меня есть пользователи, и у них есть «Кошелек». Этот кошелек должен быть списком валют/значений.

Валюта находится в таблице только с полем «имя». ID: 1 Имя:

И EUR Я хочу, чтобы мой бумажник, чтобы быть что-то вроде: Валюта: EUR, стоимость: 0, Валюта: USD, стоимость: 1000

Для этого я обычно использую тройной с другим столом, скажем, баланса. Где Баланс имел бы: Кошелек ID: 1, Идентификатор валюты: 1, Значение: 50

Я хочу сделать правильные вещи здесь, и я не слишком уверен, как действовать дальше.

Благодаря

ответ

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() 

Edit:

currency не должен быть моделью сама по себе, потому что не так много валюты там. Также вы можете избежать объединения дополнительных таблиц при запросе. Используйте choices на CharField вместо:

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

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

Но опять же, если у вас есть много валют, идти на модели.

Если вы используете связь OneOnOne между Wallet и User, тогда не имеет значения, где это. Но если у вас несколько кошельков для одного пользователя, я думаю, вы должны выяснить, почему user находится в Wallet, правильно?

+0

Спасибо, хорошо, что я имел в виду. Не могли бы вы объяснить, почему связь между кошельком и пользователем не смоделирована с полем кошелька в пользовательской модели вместо поля пользователя в модели кошелька? Кроме того, небольшая деталь, валюта - это таблица, поэтому я собираюсь использовать: currency = models.ForeignKey (Currency) вместо CharField – user1800356

+0

Я отредактировал свой ответ. Смотрите, если это имеет смысл. –

+0

Хорошо, это дает полный смысл, спасибо! – user1800356