2017-06-17 116 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.