Django-delegerede er en Django app til at få AUTOMATISK CHAINABLE MANAGER / QUERYSET delegeret METODER.
Normalt ved at definere udlejer metoder, Django lader dig gøre dette:
>>> SomeModel.objects.custom_query ()
... Men det vil ikke lade dig gøre dette:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... Medmindre du duplikere dine metoder og definere en redundant queryset underklasse ... indtil nu.
Med DelegateManager ogdelegate, kan du skrive vedligeholde custom-query logik med gratis kæde. i stedet for at definere udlejer metoder, du definere queryset metoder, dekorere dem, du gerne vil uddelegere, og en to-line DelegateManager underklasse angivelse af queryset. ET VIOLA. Som så:
fra delegeret import DelegateManager, uddelegere
klasse CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self, some_value):
& Nbsp; tilbagevenden self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (selv-):
& Nbsp; tilbagevenden self.filter (some_other_param = "noget andet")
klasse CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
klasse SomeModel (models.Model):
& Nbsp; objekter = CustomManager ()
# Dette vil arbejde:
SomeModel.objects.qs_method ('yo Dogg)
# Dette vil også arbejde:
SomeModel.objects.qs_method ('yo dogg «). Qs_method (" Jeg hørte du kan lide queryset delegation metode «)
At uddelegere alle de metoder i en QuerySet automatisk, kan du oprette en underklasse af DelegateQuerySet. Disse to QuerySet underklasser arbejde identisk:
fra delegeret import DelegateQuerySet, uddelegere
klasse ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (selv-):
& Nbsp; # ...
klasse AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (selv-):
& Nbsp; # ...
Du kan også anvende dendelegate dekoratør direkte til en klasse - det tillader dig at uddelegere alle metoder i en klasse uden at forstyrre dens arv kæden. Dette eksempel virker identisk med de to foregående:
fra delegeret import delegerede
delegate
klasse CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (self, some_value):
& Nbsp; afkast self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Kommentarer ikke fundet