2008-10-31 3 views
3

Я пытаюсь создать модель для приложения, позволяющего двум людям делать ставки друг с другом (я знаю, звучит глупо ...). Мне интересно, как установить ставку с пользователями. Структура, как этодизайн структуры модели для django

|-------------|  |----------| 
| Bet  |  | User  | 
| BetUser1 |  |----------| 
| BetUser2 | 
| Winner  | 
| ...   | 
|-------------| 

Таким образом, мы получили 2-х человек, что пари друг с другом (оба Users из системы Джанго AUTH), а затем, после того, как один из них побеждает, есть победитель. Теперь все эти 3 поля типа User, но:

  • Должен ли я сделать BetUser1 и BetUser2 отдельные поля, или создать какое-то отношение многих к-два здесь? (со многими-к-двум - много-ко-многим и с некоторым внешним способом обеспечения не более 2 Users может быть назначено каждой ставке?
  • Победителем может быть только пользователь 1 или пользователь 2, еще никто Конечно. Как я должен создать это поле, еще один ForeignKey(User), или некоторые еще?

Просто глядя на свежие точки зрения, как это кажется, что в таком глупом случае я застрял с системой Джанго модели.

ответ

4

Возможно, я бы добавил третью модель, чтобы представить конкретную ставку, которую кто-то разместил, так как можно предположить, что более двух человек могут вступить в ставку. Это выглядело бы примерно так:

USER  WAGER    BET 
      User (FK(User)) Description 
      Bet (FK(Bet))  Winner (FK (Wager), null=True) 
      Amount 

Джанго будет автоматически генерировать user.wager_set и bet.wager_set на основе внешних ключей. Это позволяет вам легко перебирать и отображать ставки для ставки, а также ставки от каждого пользователя. Вы также можете добавить ограничение unique_together на User и Bet в таблице Wager, чтобы каждый пользователь мог сделать только одну ставку.

Когда все ставки сделаны и выбран победитель, вы только что установили bet.winner.

В случае, если вы столкнетесь с ним, вы можете увидеть предупреждение о related_name имея Bet пункт Wager и Wager пункт Bet. Чтобы исправить это, просто добавьте related_name=wagers в Wager.bet.

+0

Для этого требуется ограничение, чтобы ограничить его двумя экземплярами Wager для одной и той же ставки. Я бы предложил добавить метод для проверки этого и создать исключение, если кто-то попытается сэкономить третью ставку для данной ставки. – 2008-10-31 13:44:26

1

Что вам нужно, это много-ко-многим с дополнительными данными (например, сумма на коне, время вошли, ...)

Там есть chaper на этом в отличной Джанго документации на написание моделей.

Тайлер уже наметил правильную схему для этого.

Смежные вопросы