2012-03-20 37 views
0

我正在創建一個基於文本的瀏覽器遊戲,並且需要django模型結構的一些建議。所有的例子都來自同一個項目,因此假設你已經從頂部到底部閱讀所有問題,我不會重複相同的信息。我的項目中的Django模型結構


第一個問題

我有一個auth應用程序,它包含用戶的個人資料(Player模型),alliance應用程序,它擁有所有玩家加入工會和medals應用程序,它代表了雙方球員和獎勵信息聯盟。

用戶和聯盟都可以分配獎牌,因此其中一個選項是創建連接到MedalPlayerAlliance模型中的M2M字段。

另一種選擇將使medals應用程序可用於我的任何其他項目。這種方法包括在Medal模型中使用通用關係,該模型鏈接到PlayerAlliance

哪個解決方案更像django,或者我可以做但我想?


第二個問題

將有玩家來完成任務。任務的場景差別很大,因此我需要某種方法爲每個任務編寫獨特的任務進度檢查代碼。

任務保存在數據庫中,其中包含有關獎勵的信息(幾乎相同)。我應該在哪裏爲每項任務編寫獨特的代碼?也許我應該稍後添加一些字段和eval()?然後所有的信息將被保存在數據庫中。此外,任務需要一些跟蹤,例如,想象一下進入手動部分的簡單任務(只是爲了確保玩家知道它在哪裏)。然後我需要在某處註冊玩家是否訪問過手冊頁。我想在任務應用程序中創建另一個模型TaskTrackers。然後出現另一個問題。如果我應該從PlayerTaskTrackers添加OneToOne字段,反之亦然?


歸納起來,主要的問題是,是否應該我添加OneToOneFields/M2M領域的用戶配置文件模型或目標模型添加OneToOneFields/Foreigneys到用戶模式?後者會讓我的應用程序更加可重用,但第一種方法可能更符合邏輯。

等待答案。

+0

順便說一句,如果您打算使用Django身份驗證,則調用應用程序「auth」並不是一個好主意。它也是'auth',兩個同名的應用程序不是很好(例如'manage.py test auth')。 – DrTyrsa 2012-03-20 13:27:06

回答

0

你的第一個問題,你可以做一個M2M獎章,或使用通用的外鍵。最終你會得到一些帶有M2M的連接表。使用通用外鍵,您不會有任何連接表,但是您將擁有額外的內容類型查詢。所以,你可能需要設置兩種方式,看看哪些會影響性能更多

關於你的第二個問題,我可能會採用使用「任務」模型和一個或多個「Step」模型的方法,它可以被設置爲一個內聯formset。然後你需要一個像「CompletedPlayerTasks」或類似的表格,其中包含玩家ID,任務ID和步驟ID。如果該表中存在步驟ID,則該任務已完成。

這聽起來像你需要能夠爲每個任務的步驟創建自定義字段和表單,這在Django中並不難完成。有some off the shelf solutions這樣做,但你可能需要寫你自己的。

最後,我不會命名保存用戶配置文件「auth」的應用程序,這可能會導致Django的contrib.auth應用程序出現命名空間問題。我會將它命名爲「配置文件」,只是更明顯的是該應用程序所包含的內容。

希望能給你一些想法。