1

別のカスタム モデル マネージャーにするか、既存のモデル マネージャーの機能にするかをどのように判断しますか?

たとえば、クエリセットがモデルのすべてのインスタンスである単一のモデル マネージャーを作成できます。次に、そのマネージャー内に関数を作成して、プライベートまたはパブリックとしてリストされたインスタンスのみなどのサブセットを返すことができます。

別の方法として、プライベート インスタンスとパブリック インスタンスのクエリセットを返すモデル マネージャーごとに個別のカスタム モデル マネージャーを作成することもできます。

例えば:

Video.objects.get_private()
Video.objects.get_public()

また

Video.private.all()
Video.public.all()
4

1 に答える 1

1

Python の禅 より:

>>> import this
The Zen of Python, by Tim Peters

...    
Explicit is better than implicit.
...
>>> 

コードサンプルから推測したよりも状況が複雑かもしれませんが、私見ではフィルターを使用する必要があります。

Video.objects.filter(private=False)

一般的なフィルターのタイプストロークを節約しようとしている場合は、クエリセットが遅延しているため、それらを保存できることを覚えておいてください。

private_videos = Video.objects.filter(private=False)
...
private_videos.objects.filter(director='Frederico Felini').order_by('-year')

最初の割り当ては、データベースとの通信をトリガーしません。より複雑なもののための予備のカスタム マネージャー。

Django テンプレート システム sux^H^H^His が意図的に障害を負っているため (テンプレート フィルターを作成せずに引数を使用してメソッドを呼び出すことはできません)、モデル メソッドやカスタム マネージャーが多数あるこのパターンを見てきました。その場合は、テンプレート レイヤーを Jinja2 に切り替えます。

于 2012-02-03T02:07:38.953 に答える