2

我有一个 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 和 ID 为“y”的 Source 的 Record 对象的数量,那么放置该函数的适当代码区域在哪里?

现在我在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

4

1 回答 1

2

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

来自Django 文档

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

于 2013-08-23T19:13:32.087 回答