25

get_queryset() メソッドが結果を返さない場合がある Django に ListView があります。これを行うには、次の 3 つの方法を試しました。

  1. return EmptyQuerySet()
  2. return Model.objects.none()
  3. return Model.objects.filter(pk=-1)

これらはそれぞれ、わずかに異なるオブジェクトを返します。

  1. django.db.models.query.EmptyQuerySetモデル属性をNone
  2. django.db.models.query.EmptyQuerySetモデル属性をModel
  3. django.db.models.query.QuerySetモデル属性をModel

3 番目のオプションのみが、クラス ベースの ListView で機能します。ListView がモデル属性にアクセスしようとすると、属性エラーで他のオプションがクラッシュします。これは私を驚かせ、MRO の問題を引き起こす可能性のある場所にモデルをインポートする必要があるため、苦痛です。

私は何を間違っていますか/何を別の方法で行うべきですか?

更新: 問題は、クラス ビュー メソッドを介して空のクエリセットを返す正しい方法は何get_queryset()ですか?

更新:属性にアクセスしようとすると属性エラーが発生する Django の一般的なビューの行は次のmodelとおりです: https://github.com/django/django/blob/stable/1.5.x/django/views/generic/list.py #L166 .

4

1 に答える 1