【问题标题】:Where does Django controller logic live?Django 控制器逻辑在哪里?
【发布时间】:2017-06-17 21:14:54
【问题描述】:

我无法确定在我的 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

根据我的阅读,我认为我想编写的这些函数不应该存在于模型中,因为这些函数与单个对象实例无关。它们可能属于自定义管理器,因为它们在 QuerySet 上工作,或者它们属于 QuerySet 管理器还是单独的包(python 文件)?

【问题讨论】:

    标签: django django-models


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 2010-10-13
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 2011-08-02
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多