django-delegado es una aplicación Django para obtener automáticamente encadenables MANAGER / MÉTODOS DELEGADOS QuerySet.
Normalmente, mediante la definición de métodos de manager, Django le permite hacer esto:
>>> SomeModel.objects.custom_query ()
... Pero NO dejar de hacer esto:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... A menos que duplicar sus métodos y definir una subclase queryset redundante ... hasta ahora.
Con DelegateManager ydelegate, puede escribir lógica personalizada en consultas mantenible con punto neutro. en lugar de definir métodos de manager, se definen los métodos de QuerySet, decorar los desea delegar, y una de dos líneas DelegateManager subclase especificando el queryset. ET VIOLA. Al igual que:
del delegado DelegateManager importación, delegar
clase 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 más")
clase CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
SomeModel clase (models.Model):
& Nbsp; objetos = CustomManager ()
# Esto va a funcionar:
SomeModel.objects.qs_method ('Dogg yo')
# Esto también funcionará:
SomeModel.objects.qs_method ('Dogg yo'). Qs_method ('Te escuché gusta queryset delegación método')
Para delegar la totalidad de los métodos en un QuerySet automáticamente, puede crear una subclase de DelegateQuerySet. Estos dos subclases de QuerySet funcionan igual:
del delegado DelegateQuerySet importación, delegar
ManualDelegator clase (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self):
& Nbsp; # ...
clase AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (self):
& Nbsp; # ...
También puede aplicar el decoradordelegate directamente a una clase - esto permite delegar todos los métodos en una clase sin interrumpir su cadena de herencia. Este ejemplo funciona de forma idéntica a las dos anteriores:
del delegado de importación delegado
delegate
clase CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (self, some_value):
& Nbsp; de retorno self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Comentarios que no se encuentran