Django-temsilci OTOMATİK chainable MANAGER / QuerySet DELEGE YÖNTEMLERİ almak için Django uygulaması.
Normalde, yönetici yöntemleri tanımlayarak, Django bunu sağlar:
>>> SomeModel.objects.custom_query ()
... Ama bunu yapalım OLMAYACAKTIR:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... Eğer yöntemleri çoğaltmak ve ŞİMDİ KADAR yedekli QuerySet alt sınıfı ... tanımlamak sürece.
DelegateManager vedelegate ile, ücretsiz zincirleme ile sürdürülebilir özel sorgu mantığı yazabilirsiniz. yerine yönetici yöntemleri tanımlayan, sen, QuerySet yöntemleri tanımlamak, temsilci istiyorum olanlar ve QuerySet belirten bir iki satırlık DelegateManager alt sınıfı süsleyin. ET VİYOLA. Şöyle:
temsilci ithalat DelegateManager gelen, temsilci
sınıf CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (öz, some_value):
& Nbsp; dönüş self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (öz):
& Nbsp; dönüş self.filter (some_other_param = "başka bir şey")
sınıf CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
sınıf SomeModel (models.Model):
& Nbsp; nesneler = CustomManager ()
# Bu çalışacaktır:
SomeModel.objects.qs_method ('yo dogg')
# Bu da çalışacaktır:
SomeModel.objects.qs_method ('yo dogg'). Qs_method ('i yöntem heyeti QuerySet gibi duydum')
Otomatik QuerySet yöntemlerden devredebilir için DelegateQuerySet bir alt sınıfını oluşturabilirsiniz. Bu iki QuerySet alt sınıfları aynı çalışır:
temsilci ithalat DelegateQuerySet gelen, temsilci
sınıf ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (öz):
& Nbsp; # ...
sınıf AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (öz):
& Nbsp; # ...
Ayrıca bir sınıf doğrudandelegate dekoratör uygulayabilirsiniz - Bu onun miras zinciri bozmadan bir sınıftaki tüm yöntemleri temsilci izin verir. Bu örnek, önceki iki aynı çalışır:
temsilci ithalat temsilci
delegate
sınıf CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (öz, some_value):
& Nbsp; dönüş self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Yorum Bulunamadı