django-đoàn là một ứng dụng Django để có thể kết nối TỰ ĐỘNG MANAGER / queryset phương pháp đại biểu.
Thông thường, bằng cách xác định các phương pháp quản lý, Django cho phép bạn làm điều này:
>>> SomeModel.objects.custom_query ()
... Nhưng nó không cho phép bạn làm điều này:
Another_custom_query >>> SomeModel.objects.custom_query (). ()
... Trừ khi bạn lặp lại phương pháp của bạn và xác định một queryset subclass dư thừa ... ĐẾN VỚI DOANH NGHIỆP.
Với DelegateManager vàdelegate, bạn có thể viết duy trì logic tùy chỉnh truy vấn với chaining miễn phí. thay vì xác định các phương pháp quản lý, bạn xác định phương pháp queryset, trang trí những bạn muốn phân quyền, và một hai dòng DelegateManager subclass xác định queryset. ET VIOLA. Cũng giống như vậy:
từ đại biểu nhập khẩu DelegateManager, đại biểu
lớp CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (self, some_value):
& Nbsp; trở self.filter (some_param__icontains = some_value)
& Nbsp; def dont_delegate_me (tự):
& Nbsp; trở self.filter (some_other_param = "cái khác")
lớp CustomManager (DelegateManager):
& Nbsp; __ queryset__ = CustomQuerySet
lớp SomeModel (models.Model):
& Nbsp; đối tượng = CustomManager ()
# Điều này sẽ làm việc:
SomeModel.objects.qs_method ('yo Dogg')
# Này cũng sẽ làm việc:
SomeModel.objects.qs_method ('yo Dogg'). Qs_method ('i nghe bạn thích queryset đoàn phương pháp')
Phân tất cả các phương pháp trong một queryset tự động, bạn có thể tạo một lớp con của DelegateQuerySet. Hai lớp con queryset làm việc giống nhau:
từ đại biểu nhập khẩu DelegateQuerySet, đại biểu
lớp ManualDelegator (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (tự):
& Nbsp; # ...
lớp AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (tự):
& Nbsp; # ...
Bạn cũng có thể áp dụng các trang trídelegate trực tiếp đến một lớp học - điều này cho phép bạn giao toàn bộ các phương thức trong một lớp học mà không làm gián đoạn chuỗi thừa kế của nó. Ví dụ này làm y hệt trước đó hai:
từ nhập khẩu đại biểu đại biểu
delegate
lớp CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (self, some_value):
& Nbsp; trở lại self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
Bình luận không