در جنگو-نماینده یک برنامه جنگو به طور خودکار CHAINABLE MANAGER / روش نماینده QUERYSET است.
به طور معمول، با تعریف روش مدیر، جنگو شما اجازه می دهد انجام این کار:
>>> SomeModel.objects.custom_query ()
... اما نمی خواهد اجازه دهید شما این کار را:
>>> SomeModel.objects.custom_query (). another_custom_query ()
... مگر اینکه شما تکراری روش خود و تعریف یک کلاس queryset کار برکنار شده ... تا به حال.
با DelegateManager وdelegate، شما می توانید منطق سفارشی پرس و جو نگهداری با زنجیری شدن رایگان ارسال. به جای تعریف روش مدیر، شما روش queryset تعریف، تزئین آن شما می خواهم به نماینده، و دو خط DelegateManager کلاس مشخص queryset. ET ویولا. مانند:
از نماینده واردات DelegateManager، تفویض
کلاس CustomQuerySet (models.query.QuerySet):
& nbsp؛ درdelegate
و nbsp؛ دف qs_method (خود، some_value):
& nbsp؛ در self.filter بازگشت (some_param__icontains = some_value)
و nbsp؛ دف 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؛ دف qs_method (خود):
و nbsp؛ # ...
کلاس AutomaticDelegator (DelegateQuerySet):
و nbsp؛ دف qs_method (خود):
و nbsp؛ # ...
شما همچنین می توانید دکوراتورdelegate درخواست به طور مستقیم به یک کلاس - این اجازه به شما محول تمام روش در یک کلاس بدون اخلال در زنجیره ارث آن است. در این مثال عینا کار می کند به دو قبلی:
از نماینده واردات نماینده
delegate
کلاس CustomQuerySet (models.query.QuerySet):
و nbsp؛ دف qs_method (خود، some_value):
& nbsp؛ در self.filter بازگشت (some_param__icontains = some_value)
مورد نیاز:
پایتون
جنگو
نظر یافت نشد