django-delegat jest aplikacja Django dostać AUTOMATYCZNIE CHAINABLE MANAGER / QuerySet METODY delegata.
Normalnie, przez zdefiniowanie metod menedżera, Django pozwala to zrobić:
>>> SomeModel.objects.custom_query ()
... Ale to nie pozwalają to zrobić:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... Chyba, że powielają swoje metody i zdefiniować nadmiarowe QuerySet podklasy ... aż do teraz.
Z DelegateManager idelegate, możesz napisać w utrzymaniu logiki niestandardowych zapytań z bezpłatnym łańcuchowych. zamiast definiowania metod menedżera, można zdefiniować metody QuerySet, udekorować te, które chcesz przekazać, a dwu-line DelegateManager podklasy określające QuerySet. ET VIOLA. Tak:
od delegata importu DelegateManager delegować
Klasa CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self, some_value):
& Nbsp; return self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (self):
& Nbsp; return self.filter (some_other_param = "coś innego")
Klasa CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
Klasa SomeModel (models.Model):
& Nbsp; obiekty = CustomManager ()
# To będzie działać:
SomeModel.objects.qs_method ("yo Dogg")
# Będzie to również pracować:
SomeModel.objects.qs_method ("yo Dogg"). Qs_method ("Słyszałem chcesz queryset metody delegacji")
Aby delegować wszystkie metody w QuerySet automatycznie, można utworzyć podklasę DelegateQuerySet. Te dwie podklasy QuerySet działa identycznie:
od delegata importu DelegateQuerySet delegować
Klasa ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self):
& Nbsp; # ...
Klasa AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (self):
& Nbsp; # ...
Można również zastosować dekoratordelegate bezpośrednio do klasy - ta pozwala na delegowanie wszystkich metod w klasie bez zakłócania jego łańcuch dziedziczenia. W przykładzie tym działa identycznie do dwóch poprzednich:
od delegata importu delegata
delegate
Klasa CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (self, some_value):
& Nbsp; return self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Komentarze nie znaleziono