0

objects可能であれば、不必要な複雑さなしにargs または kwargs を渡すことができるようにしたいと考えています。Model.objects('something').all()またはのようになりますModel.objects('something').order_by('field')。AManager 用にカスタマイズしようとしまし__init__たが、動作しませんでした。そのため、適切な__init__関数を記述するのと同じくらい簡単かもしれません。

私が行ったことは、次のようなカスタム Manager にメソッドを追加することです。

class AManager(models.Manager):
    def example(self, arg):
        self.example = arg
        return self

class A(models.Model):
    name = models.Charfield()

    objects = AManager()

この例では、もちろんQuerySet に何らかの影響を与えない限りA.objects.example('name').all()、通常の を返します。私がやりたいのは、チェーンされたフィルターごとに重複した引数を含める必要があるようなことを避けることです。A.objects.all()example('name')A.objects.custom_filter('name').another_filter('name')

4

1 に答える 1

1

__call__この引数を受け入れ、デフォルト マネージャー (または引数に基づく別のマネージャー) とは異なるクエリ セットを返すメソッドをマネージャーに追加する必要があります。

カスタムクエリセットメソッドを作成して返す方がよいでしょう。クエリセットは連鎖するように設計されているため、同じ引数を渡し続ける必要はありません。

特定のユース ケースを追加する場合は、カスタムの Manager や QuerySet クラスを使用してそれを構築する方法を紹介できます。

于 2013-10-29T18:42:26.720 に答える