Python 在Django中,我应该将计算外键的函数放在哪里?
我有一个Django模型对象Record,它有两个其他模型RecordType和Source的外键:Python 在Django中,我应该将计算外键的函数放在哪里?,python,django,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和id为“y”的So
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的记录对象的数量,那么将该函数放在哪个代码区域合适
现在我把它放在views.py中,我觉得这违反了“胖模型,瘦视图”的最佳实践,所以我想把它从views.py中删除。但我不完全确定这是基于行还是基于表的操作类型,因此我不确定它是应该作为模型方法实现,还是作为管理器实现
以下是views.py中的当前(工作)逻辑:
record_count = Record.objects.filter(record_type__id=record_type_.id, source__id=source_.id).count()
需要明确的是,这不是一个如何获取计数的问题,而是将函数放在代码的哪个区域
这里有一个类似的问题,但它是针对“如何”而不是“在哪里”:
如果结果涉及多行,则它是一个与表相关的方法,根据Django约定,应该是一个manager方法 发件人: 添加额外的管理器方法是向模型添加“表级”功能的首选方法。(对于“行级”功能,即作用于模型对象的单个实例的功能,使用模型方法,而不是自定义管理器方法。)
结果确实涉及对多行的计数。那么,哪个模型的管理者应该获得新方法:记录?是的,因为它是您正在计算的
Record
s的数量。根据您是否使用distinct()
的不同,在其他两个模型中的任何一个上实现类似的功能都会产生不同的结果。感谢您的澄清。现在我只需要弄清楚如何将参数传递给manager方法。