2017-06-17 53 views
1

我在處理Django項目中的控制器邏輯的位置時遇到了問題。Django控制器邏輯在哪裏?

我有玩家的模型(像國際象棋選手一樣),他們將被ELO分數評分。經過一輪後,兩名球員的ELO分數得到修改和更新。接下來的比賽是根據迄今爲止參加比賽次數最少的選手進行選擇的。

class Player(models.Model): 
    tournament_class = models.ForeignKey(Topic, on_delete=models.CASCADE) # each player is part of a single tournament class 
    name = models.CharField(max_length=200) 
    contests = models.IntegerField(default=0) 
    last_contest = models.IntegerField(default=0) # round number of last contest participated in 
    ELO = models.FloatField(default=1000) # current ELO ranking 

我在哪裏可以把控制邏輯如下面的功能?

def select_candidates() 
    # return candidates who have participated in the least number of contests 

def update_ELO_scores (winner,loser) 
    # updates ELO scores based on match results 

從我讀過的內容來看,我認爲這些函數不應該存在於模型中,因爲這些函數並不涉及單個對象實例。他們可能屬於自定義管理器,因爲他們在QuerySets上工作,或者他們屬於QuerySet管理器或單獨的包(python文件)?

回答

1

Django不使用控制器本身的概念,但是這應該是有幫助的:在關係數據庫環境,Django模型照顧基於行的操作,而經理人打理的基於表的操作爲那些行。

如果你的函數代表模型的許多實例,它們應該是模型管理器的一部分。你可以閱讀更多有關聲明定製經理in the documentation

的Django可以讓你組織你的模型在許多方面,你可以把你所有的經理人在不同的模塊,如果你想要的,但很多項目使models模塊到一個文件夾,添加每個型號都有一個子模塊,並與經理共享文件。

|- views.py 
|- apps.py 
`- models 
    `-|- __init__.py 
    `- player.py #this contains the Model class and the Manager class.