我在哪里放一个函数来计算Django中的外键?

时间:2013-08-23 18:55:54

标签: python django

我有一个Django模型对象Record,它有两个其他模型RecordType和Source的外键:

class Record(models.Model):
    title = models.CharField(max_length=200)
    record_type = models.ForeignKey(RecordType)
    source = models.ForeignKey(Source)

问题:如果我想计算引用ID为“x”的RecordType的Record对象的数量和ID为“y”的Source的数量,那么放置该函数的代码的适当区域在哪里?

现在我在views.py中有它,我认为这违反了“胖模型,瘦视图”的最佳实践,所以我想从views.py中移动它。但我不完全确定这是基于行还是基于表的操作类型,因此我不确定它是应该作为模型方法实现,还是作为管理器实现。

这是views.py中的当前(工作)逻辑:

record_count = Record.objects.filter(record_type__id=record_type_.id, source__id=source_.id).count()

为了清楚起见,这不是一个如何获得计数的问题,而只是在哪个代码区域放置函数。

这是一个类似的问题,但是它解决了“如何”而不是“在哪里”: Counting and summing values of records, filtered by a dictionary of foreign keys in Django

1 个答案:

答案 0 :(得分:2)

如果结果涉及多行,则它是一个与表相关的方法,根据Django约定,应该是一个管理器方法。

来自the Django docs

  

添加额外的Manager方法是向模型添加“表级”功能的首选方法。 (对于“行级”功能 - 即,作用于模型对象的单个实例的函数 - 使用Model方法,而不是自定义Manager方法。)