2017-06-17 6 views
1

私はDjangoプロジェクトにコントローラのロジックを配置する場所を調整するのに問題があります。Djangoコントローラのロジックはどこにありますか?

私はELOスコアで評価されるプレイヤー(チェスプレーヤーのように思う)のためのモデルを持っています。ラウンド後、2人のプレイヤーは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. 
関連する問題