Django-afgevaardigde is 'n Django app outomaties kry serie skakel baar bestuurder / QUERYSET AFGEVAARDIGDE METODES.
Gewoonlik, deur die definisie bestuurder metodes, Django kan jy dit doen:
>>> SomeModel.objects.custom_query ()
... Maar dit sal nie toelaat dat jy dit doen:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... Tensy jy dupliseer jou metodes en 'n onnodige queryset subklas ... definieer tot nou toe.
Met DelegateManager endelegate, kan jy onderhoubare maat navraag logika met gratis aaneenskakeling skryf. in plaas van die definisie bestuurder metodes, jy queryset metodes definieer, versier die mense wat jy wil om te delegeer, en 'n twee-line DelegateManager subklas spesifiseer die queryset. ET VIOLA. Soos so:
uit afgevaardigde invoer DelegateManager, delegeer
klas CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self, some_value):
& Nbsp; terugkeer self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (self):
& Nbsp; terugkeer self.filter (some_other_param = "iets anders")
klas CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
klas SomeModel (models.Model):
& Nbsp; voorwerpe = CustomManager ()
# Hierdie sal werk:
SomeModel.objects.qs_method ('yo Dogg')
# Hierdie sal ook werk:
SomeModel.objects.qs_method ('yo Dogg). Qs_method ("Ek het gehoor wat jy wil queryset metode afvaardiging')
Aan al die metodes in 'n QuerySet outomaties delegeer, kan jy 'n subklas van DelegateQuerySet skep. Hierdie twee QuerySet subklasse werk identies:
uit afgevaardigde invoer DelegateQuerySet, delegeer
klas ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self):
& Nbsp; # ...
klas AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (self):
& Nbsp; # ...
Jy kan ook aansoek doen om diedelegate versierder direk aan 'n klas - dit laat jou al die metodes in 'n klas te delegeer sonder om sy erfenis ketting. Hierdie voorbeeld werk identies aan die vorige twee:
uit afgevaardigde invoer afgevaardigde
delegate
klas CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (self, some_value):
& Nbsp; terugkeer self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Kommentaar nie gevind