Джанго-делегат е Django приложение, за да получите АВТОМАТИЧНО CHAINABLE MANAGER / МЕТОДИ делегира QUERYSET.
Обикновено, като се определят методите за мениджър, Django ви позволява да направите това:
>>> SomeModel.objects.custom_query ()
... Но това няма да ви позволи да направите това:
Another_custom_query () >>> SomeModel.objects.custom_query ().
... Освен ако не се дублират своите методи и определи съкратени queryset подклас ... до сега.
С DelegateManager иdelegate, можете да напишете възможна за поддържане поръчка заявка логика с безплатен верижното. вместо да се определи методи мениджър, вие определяте методите queryset, украсяват тези, които искате да делегира, както и две-лайн DelegateManager подклас посочва queryset. ET VIOLA. Като толкова:
от делегат внос DelegateManager, делегира
клас CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; Def qs_method (самостоятелно, some_value):
& Nbsp; връщане self.filter (some_param__icontains = some_value)
& Nbsp; Def dont_delegate_me (самостоятелно):
& Nbsp; връщане self.filter (some_other_param = "нещо друго")
клас CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
клас SomeModel (models.Model):
& Nbsp; обекти = CustomManager ()
# Това ще работи:
SomeModel.objects.qs_method ("йо Дог")
# Това също ще работи:
SomeModel.objects.qs_method ("йо Дог"). Qs_method ("Чух, че си искал queryset метод делегация")
За да делегира всички методи в QuerySet автоматично, можете да създадете един подклас на DelegateQuerySet. Тези две QuerySet подкласове работят по идентичен начин:
от делегат внос DelegateQuerySet, делегира
клас ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; Def qs_method (самостоятелно):
& Nbsp; # ...
клас AutomaticDelegator (DelegateQuerySet):
& Nbsp; Def qs_method (самостоятелно):
& Nbsp; # ...
Можете също така да се приложиdelegate декоратор директно към класа - това позволява да делегира всички методи в клас, без да се нарушава неговата наследство верига. Този пример работи по същия начин за предходните две:
от делегат внос делегат
delegate
клас CustomQuerySet (models.query.QuerySet):
& Nbsp; Def qs_method (самостоятелно, some_value):
& Nbsp; връщане self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Коментари не е намерена