concepção de estrutura modelo de Django

votos
3

Eu estou tentando criar um modelo para uma aplicação que permite a 2 pessoas a apostar uns com os outros (eu sei, soa estúpido ...). O que eu estou querendo saber é sobre como conectar a aposta com os usuários. A estrutura é assim

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

Por isso temos 2 pessoas que apostam uns com os outros (ambos são Usersdo sistema de Django auth) e, em seguida, depois que um deles ganha, há um vencedor. Agora todos esses 3 campos são do tipo User, mas:

  • Devo fazer BetUser1 e BetUser2 campos separados, ou projetar alguma relação muitos-para-dois aqui? (com muitos-para-dois sendo uma relação muitos-para-muitos e com alguma forma externa de garantir a não mais que 2 Userspode ser atribuído a cada aposta?
  • vencedor só pode ser Utilizador 1 ou Utilizador 2, o mais ninguém, claro. Como devo criar esta campo, ainda outro ForeignKey(User), ou alguma outra coisa?

Apenas à procura de algum ponto de vista novo, como parece que, nesse caso estúpido eu estou preso com o sistema de modelo Django.

Publicado 31/10/2008 em 13:08
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

Eu provavelmente gostaria de acrescentar um terceiro modelo para representar uma aposta específica que alguém tenha colocado, como é possível que mais de duas pessoas poderiam entrar em uma aposta. Seria algo parecido com isto:

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

Django irá gerar automaticamente user.wager_sete bet.wager_setcom base nas chaves estrangeiras. Isso permite que você interagir e exibir as apostas para uma aposta, assim como as apostas de cada usuário com facilidade. Você também pode adicionar uma unique_togetherrestrição sobre Usere Betna tabela de Wager modo que cada usuário só pode fazer uma aposta.

Quando a aposta é tudo feito, e um vencedor foi selecionado, você acabou de definir bet.winner.

No caso de você correr para ele, você pode ver um aviso sobre related_namepor ter Betponto a Wagere Wagerponto a Bet. Para corrigir, basta adicionar related_name=wagersa Wager.bet.

Respondeu 31/10/2008 em 13:32
fonte usuário

votos
1

O que você precisa é uma relação muitos-para-muitos com dados adicionais (por exemplo, a quantidade sobre a aposta, o tempo inserido, ...)

Há uma chaper sobre isso nas excelentes docs Django em modelos de escrita.

Tyler já delineou o esquema adequado para isso.

Respondeu 31/10/2008 em 14:33
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more