تصميم هيكل نموذجي لجانغو
-
05-07-2019 - |
سؤال
أحاول تصميم نموذج لتطبيق يسمح لشخصين بالمراهنة مع بعضهما البعض (أعلم أن هذا يبدو غبيًا...).ما أتساءل عنه هو كيفية ربط الرهان مع المستخدمين.الهيكل هو مثل هذا
|-------------| |----------|
| Bet | | User |
| BetUser1 | |----------|
| BetUser2 |
| Winner |
| ... |
|-------------|
إذن لدينا شخصان يراهنان مع بعضهما البعض (كلاهما Users
من نظام مصادقة جانغو) وبعد فوز أحدهم، يكون هناك فائز.الآن كل هذه الحقول الثلاثة من النوع User
, ، لكن:
- هل يجب أن أجعل BetUser1 وBetUser2 حقلين منفصلين، أو أصمم علاقة متعدد إلى اثنين هنا؟(مع كون متعدد إلى اثنين متعددًا إلى متعدد ومع وجود طريقة خارجية لضمان عدم وجود أكثر من 2
Users
يمكن تعيينها لكل الرهان؟ - يمكن أن يكون الفائز إما المستخدم 1 أو المستخدم 2 فقط، ولا أحد آخر بالطبع.كيف ينبغي أن أقوم بإنشاء هذا المجال، وآخر
ForeignKey(User)
, ، أو البعض الآخر؟
فقط أبحث عن وجهة نظر جديدة، حيث يبدو أنه في مثل هذه الحالة الغبية أنا عالق في نظام نموذج جانغو.
المحلول
ربما سأضيف نموذجًا ثالثًا يمثل رهانًا محددًا وضعه شخص ما، حيث من الممكن أن يدخل أكثر من شخصين في الرهان.سيبدو شيء هكذا:
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
في جدول الرهان بحيث يمكن لكل مستخدم إجراء رهان واحد فقط.
عند الانتهاء من الرهان بالكامل، واختيار الفائز، ما عليك سوى تعيينه bet.winner
.
في حالة واجهت ذلك، قد ترى تحذيرًا بشأن related_name
من خلال وجود Bet
يشير إلى Wager
و Wager
يشير إلى Bet
.لإصلاح، فقط أضف related_name=wagers
ل Wager.bet
.
نصائح أخرى
ما تحتاجه هو علاقة متعدد إلى متعدد مع بيانات إضافية (على سبيل المثال.مبلغ الرهان، الوقت الذي تم إدخاله،...)
هناك chaper حول هذا في مستندات Django الممتازة حول نماذج الكتابة.
لقد حدد تايلر بالفعل المخطط المناسب لهذا الغرض.