ジャンゴ·デリゲートは、自動的にチェーン可能マネージャ/クエリセットのデリゲートメソッドを取得するためのDjangoのアプリです。
通常は、マネージャーのメソッドを定義することによって、Djangoはあなたがこれを行うことができます:
>>> SomeModel.objects.custom_query()
...しかし、それはあなたがこれを行うに進みません。
>>> SomeModel.objects.custom_query()。another_custom_query()
...あなたはあなたのメソッドを複製し、冗長なクエリセットサブクラスを定義する...今までない限り。
DelegateManagerと@Delegateを使用すると、無料の連鎖で保守したカスタムクエリのロジックを記述することができます。代わりにマネージャーのメソッドを定義するのではなく、あなたが委任したいのですが、それらを飾る、クエリセットメソッドを定義し、クエリセットを指定する2ラインDelegateManagerサブクラス。 ET VIOLA。そうように:
デリゲート輸入DelegateManagerから、デリゲート
クラスCustomQuerySet(models.query.QuerySet):
  @Delegate
 デフqs_method(自己、some_value):
 戻りself.filter(some_param__icontains = some_value)
 デフdont_delegate_me(自己):
 戻りself.filter(some_other_param =「他の何か」)
クラスCustomManager(DelegateManager):
  _ queryset__ = CustomQuerySet
クラスSomeModel(models.Model):
 オブジェクト= CustomManager()
#これは動作します:
SomeModel.objects.qs_method( 'よドッグ')
#これも動作します。
SomeModel.objects.qs_method( 'よドッグ')。qs_method(「私はクエリセットメソッドの委任ようにあなたを聞いた ')
自動的にクエリセット内のすべてのメソッドを委譲するには、DelegateQuerySetのサブクラスを作成することができます。これら二つのクエリセットサブクラスは同じように動作します。
デリゲート輸入DelegateQuerySetから、デリゲート
クラスManualDelegator(models.query.QuerySet):
  @Delegate
 デフqs_method(自己):
 #...
クラスAutomaticDelegator(DelegateQuerySet):
 デフqs_method(自己):
 #...
また、クラスに直接@Delegateデコレータを適用することができます - これは、その継承チェーンを中断することなく、クラスのすべてのメソッドを委譲することを可能にする。この例では、前の2つに同じように動作します:
デリゲート輸入デリゲートから
@Delegate
クラスCustomQuerySet(models.query.QuerySet):
 デフqs_method(自己、some_value):
 戻りself.filter(some_param__icontains=some_value)
Requirements:
- Python
- ジャンゴます。
コメントが見つかりません