django-délégué est une application Django pour récupérer automatiquement chainables MANAGER / queryset méthodes déléguées.
Normalement, en définissant les méthodes de gestionnaire, Django vous permet de faire ceci:
>>> SomeModel.objects.custom_query ()
... Mais il ne vous laissera pas faire:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... À moins que vous dupliquez vos méthodes et de définir une sous-classe queryset redondante ... jusqu'à maintenant.
Avec DelegateManager etDelegate, vous pouvez écrire une logique personnalisée-requête maintenable avec chaînage libre. au lieu de définir les méthodes de gestionnaire, vous définissez les méthodes de QuerySet, décorer ceux que vous souhaitez déléguer, et un sur deux lignes DelegateManager sous-classe en spécifiant le queryset. ET VIOLA. Comme ceci:
du délégué importation DelegateManager, déléguer
classe CustomQuerySet (models.query.QuerySet):
& Nbsp;Delegate
& Nbsp; def qs_method (auto, some_value):
& Nbsp; retour self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (auto):
& Nbsp; retour self.filter (some_other_param = "autre chose")
classe CustomManager (DelegateManager):
& Nbsp; __ = queryset__ CustomQuerySet
SomeModel de classe (models.Model):
& Nbsp; objets CustomManager = ()
# Cela va fonctionner:
SomeModel.objects.qs_method ('yo dogg')
# Cela va fonctionner aussi:
SomeModel.objects.qs_method ('yo dogg'). Qs_method («Je vous ai entendu aime queryset méthode délégation»)
Pour déléguer toutes les méthodes dans un QuerySet automatiquement, vous pouvez créer une sous-classe de DelegateQuerySet. Ces deux sous-classes QuerySet fonctionne de manière identique:
du délégué importation DelegateQuerySet, déléguer
ManualDelegator de classe (models.query.QuerySet):
& Nbsp;Delegate
& Nbsp; def qs_method (auto):
& Nbsp; # ...
classe AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (auto):
& Nbsp; # ...
Vous pouvez également appliquer le décorateurDelegate directement à une classe - ce qui permet de déléguer toutes les méthodes dans une classe sans perturber sa chaîne d'héritage. Cet exemple fonctionne de façon identique aux deux précédentes:
du délégué délégué d'importation
Delegate
classe CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (auto, some_value):
& Nbsp; retour self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Commentaires non trouvées