0

サイトに入力されたすべての製品を表示する方法を追加する必要があります。現在、それらはenabled = Trueでフィルタリングされており、これは有効になっている製品のみを示しています。すべての製品を一覧表示し、管理者でそれらを有効または無効にできるようにしたいと思います。前もって感謝します!

モデル:

class ProductManager(models.Manager):
    """
    Filters enabled product
    """

    def get_query_set(self):
        return super(ProductManager, self).get_query_set().filter(is_enabled=True)
4

1 に答える 1

1

Djangoのドキュメントはこれについて非常に明確です。特に、Djangoの世界に慣れていない場合は、暖かい毛布のようにドキュメントに身を包む必要があります。時間がある場合はそれらを読んでください(時間を作ってみてください)が、できない場合は、「django」とあなたが抱えている問題が何であれ、Googleで検索してください。99%の場合、最初の結果はDjangoドキュメントのページであり、必要な情報が正確に含まれています。

そうは言っても、ドキュメントはこの問題について述べています

カスタムManagerオブジェクトを使用する場合、(モデルで定義されている順序で)最初に遭遇するManagerDjangoには特別なステータスがあることに注意してください。Djangoは、クラスで定義された最初のマネージャーを「デフォルト」マネージャーとして解釈し、Djangoのいくつかの部分(dumpdataを含む)はそのマネージャーをそのモデル専用に使用します。そのため、get_query_set()をオーバーライドすると、操作するオブジェクトを取得できなくなる状況を回避するために、デフォルトマネージャーの選択に注意することをお勧めします。(強調鉱山)

それはまさにあなたが経験していることです。上記の引用の最初の文をもう一度見てください。Djangoは、最初に遭遇したマネージャーを、管理者を含むその機械のさまざまな部分の「デフォルト」マネージャーとして使用します。したがって、解決策は、カスタムマネージャーの前にフィルター処理されていないマネージャーを追加することです。そのための最善の方法は、独自のマネージャーを提供しない場合にDjangoが自動的に追加する標準マネージャーを使用することです。

objects = models.Manager()
product_manager = ProductManager()

終わり。管理者は、最初の標準マネージャーをデフォルトとして使用するため、すべての製品を一覧表示します。

于 2012-07-10T18:33:52.143 に答える