Django의 모델 구조 설계
-
05-07-2019 - |
문제
나는 2 명이 서로 베팅 할 수 있도록 응용 프로그램을위한 모델을 설계하려고 노력하고 있습니다. 내가 궁금한 점은 BET를 사용자와 연결하는 방법입니다. 구조는 다음과 같습니다
|-------------| |----------|
| Bet | | User |
| BetUser1 | |----------|
| BetUser2 |
| Winner |
| ... |
|-------------|
그래서 우리는 서로 베팅하는 2 명을 얻었습니다 (둘 다 Users
Django Auth System에서)와 그 중 하나가 승리 한 후에는 승자가 있습니다. 이제이 3 개의 필드는 모두 유형입니다 User
, 하지만:
- Betuser1과 Betuser2 별도의 필드를 만들거나 여기서 다중 관계를 설계해야합니까? (다중에서 두 가지가 많고 외부 방식으로 2 명 이상을 보장하지 않습니다.
Users
각 베팅에 할당 할 수 있습니까? - 당첨자는 사용자 1 또는 사용자 2 일 수 있습니다. 이 필드를 어떻게 만들어야 하는가?
ForeignKey(User)
, 또는 다른 것?
어리석은 경우에 나는 Django 모델 시스템에 붙어있는 것처럼 보이기 때문에 새로운 관점을 찾고 있습니다.
해결책
나는 아마도 누군가가 배치 한 특정 베팅을 나타내는 세 번째 모델을 추가 할 것입니다. 다음과 같이 보일 것입니다.
USER WAGER BET
User (FK(User)) Description
Bet (FK(Bet)) Winner (FK (Wager), null=True)
Amount
Django는 자동으로 생성됩니다 user.wager_set
그리고 bet.wager_set
외국 키를 기반으로합니다. 이를 통해 각 사용자의 베팅뿐만 아니라 베팅 용 베팅을 쉽게 반복하고 표시 할 수 있습니다. 당신은 또한 추가 할 수 있습니다 unique_together
제약 User
그리고 Bet
베팅 테이블에서 각 사용자가 하나의 베팅 만 할 수 있도록.
베팅이 모두 완료되고 승자가 선택되면 bet.winner
.
당신이 그것을 달리는 경우, 당신은 경고를 볼 수 있습니다. related_name
가지고 있습니다 Bet
가리키다 Wager
그리고 Wager
가리키다 Bet
. 수정하려면 추가하십시오 related_name=wagers
에게 Wager.bet
.
다른 팁
필요한 것은 추가 데이터와 다수의 관계입니다 (예 : 베팅 금액, 입력 시간, ...)
이있다 챕터 이것에 대한 우수한 Django Docs에서는 모델 작성 모델에서.
타일러는 이미 이에 대한 적절한 스키마를 설명했습니다.