2013-08-23 72 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

感謝您的澄清。現在我只需要弄清楚如何將參數傳遞給管理器方法。 –

相關問題