django-delegado é um app Django para receber automaticamente chainable MANAGER / MÉTODOS DELEGADO Queryset.
Normalmente, através da definição de métodos de gerente, Django permite que você faça o seguinte:
>>> SomeModel.objects.custom_query ()
... Mas não vou deixar você fazer isso:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... A menos que você duplicar seus métodos e definir um queryset subclasse redundante ... até agora.
Com DelegateManager edelegate, você pode escrever a lógica de consulta personalizada sustentável com encadeamento livre. em vez de definir métodos de treinador, você define métodos queryset, decorar aqueles que você gostaria de delegar, e uma de duas linhas DelegateManager subclasse especificando o queryset. ET VIOLA. Como assim:
do delegado importação DelegateManager, delegar
classe CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self, some_value):
& Nbsp; retorno self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (self):
& Nbsp; self.filter retorno (some_other_param = "algo mais")
classe CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
SomeModel classe (models.Model):
& Nbsp; objetos = CustomManager ()
# Isso vai funcionar:
SomeModel.objects.qs_method ('yo Dogg')
# Isso também vai funcionar:
SomeModel.objects.qs_method ('yo Dogg'). Qs_method ("Ouvi dizer que você gosta queryset método de delegação ')
Para delegar todos os métodos em um QuerySet automaticamente, você pode criar uma subclasse de DelegateQuerySet. Estas duas subclasses QuerySet funcionam de forma idêntica:
do delegado importação DelegateQuerySet, delegar
ManualDelegator classe (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self):
& Nbsp; # ...
classe AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (self):
& Nbsp; # ...
Você também pode aplicar o decoradordelegate diretamente a uma classe - isto permite-lhe delegar todos os métodos em uma classe sem interromper a sua cadeia de herança. Este exemplo funciona de forma idêntica às duas anteriores:
do delegado importação delegado
delegate
classe CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (self, some_value):
& Nbsp; retorno self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Comentários não encontrado