2013-08-23 43 views
2

我有一个Django模型对象,记录,其中有外键的其他两款车型记录类型和来源:我在哪里放置一个函数来计算Django中的外键?

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

问:如果我想指望它是指用id来RECORDTYPE记录对象的数量“× “和源代码为”y“,其中是放置该函数的代码的适当区域?

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

回答

2

如果结果涉及多个行,它是一个表相关的方法,并根据Django的约定,应成为经理人的方法。

the Django docs

增加额外的manager方法是为“表级”功能添加到您的模型的首选方式。 (对于“行级”功能 - 即作用于模型对象的单个实例的功能 - 使用模型方法,而不是自定义管理器方法。)

+0

结果确实涉及多行计数。那么,哪个模型的经理应该得到新的方法:记录? –

+1

是的,因为它是你正在计数的“记录”的数量。在其他两种模型中实现类似的功能会根据您使用distinct()或不使用不同的结果。 –

+0

感谢您的澄清。现在我只需要弄清楚如何将参数传递给管理器方法。 –

相关问题