2

Django モデル オブジェクト Record があります。このオブジェクトには、他の 2 つのモデル 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()

明確にするために、これはカウントを取得する方法の問題ではなく、単にコードのどの領域に関数を配置するかという問題です。

これは同様の質問ですが、「場所」ではなく「方法」に対処していました: Django の外部キーの辞書によってフィルター処理されたレコードの値のカウントと合計

4

1 に答える 1

2

結果に複数の行が含まれる場合、それはテーブル関連のメソッドであり、Django の規則に従って、マネージャー メソッドにする必要があります。

Django ドキュメントから:

モデルに「テーブルレベル」の機能を追加するには、別の Manager メソッドを追加することをお勧めします。(「行レベル」の機能、つまり、モデル オブジェクトの単一のインスタンスで動作する関数については、カスタムの Manager メソッドではなく、Model メソッドを使用します。)

于 2013-08-23T19:13:32.087 に答える