django-afgevaardigde is een Django app om automatisch schakelbare MANAGER / queryset DELEGATE METHODEN.
Normaal gesproken, door het definiëren van manager methoden, Django kunt u dit doen:
>>> SomeModel.objects.custom_query ()
... Maar het zal je niet laten dit te doen:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... Tenzij u dupliceren uw methoden en definieer een redundante queryset subklasse ... tot nu toe.
Met DelegateManager endelegate, kunt u onderhoudbaar maat-query-logica te schrijven met gratis chaining. in plaats van het definiëren manager methoden, je queryset methoden te definiëren, te versieren die u wilt delegeren, en een twee-lijn DelegateManager subklasse het opgeven van de queryset. ET VIOLA. Als volgt:
van afgevaardigde import DelegateManager, delegeren
klasse CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (zelf, some_value):
& Nbsp; return self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (zelf):
& Nbsp; return self.filter (some_other_param = "iets anders")
klasse CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
klasse SomeModel (models.Model):
& Nbsp; objecten = CustomManager ()
# Dit zal werken:
SomeModel.objects.qs_method ('yo dogg')
# Dit zal ook werken:
SomeModel.objects.qs_method ('yo dogg'). Qs_method ('Ik heb gehoord dat je queryset methode delegatie')
Als u alle van de methoden in een QuerySet automatisch delegeren, kunt u een subklasse van DelegateQuerySet creëren. Deze twee QuerySet subklassen werkt identiek:
van afgevaardigde import DelegateQuerySet, delegeren
klasse ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (zelf):
& Nbsp; # ...
klasse AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (zelf):
& Nbsp; # ...
U kunt dedelegate decorateur ook rechtstreeks van toepassing zijn op een klasse - dit laat u toe om alle methoden in een klasse delegeren zonder verstoring van zijn erfdeel keten. Dit voorbeeld werkt identiek aan de vorige twee:
van afgevaardigde import afgevaardigde
delegate
klasse CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (zelf, some_value):
& Nbsp; return self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Reacties niet gevonden