Django控制器逻辑在哪里?

时间:2017-06-17 21:14:55

标签: django django-models

我无法找到将控制器逻辑放在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 个答案:

答案 0 :(得分:1)

Django本身不使用控制器的概念,但这应该是有用的:在关系数据库环境中,Django模型负责基于行的操作,而Managers负责基于表的操作那些行。

如果您的函数代表模型的许多实例,那么它们应该是该模型管理器的一部分。您可以阅读有关声明自定义管理员in the documentation

的更多信息

Django允许您以多种方式构建模型,如果需要,可以将所有管理器放在不同的模块中,但是许多项目将models模块放入文件夹,为每个模型添加子模块,并与经理分享文件。

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