Django-ציר הוא אפליקציה Django כדי לקבל באופן אוטומטי MANAGER CHAINABLE / שיטות נציג QUERYSET.
בדרך כלל, על ידי הגדרת שיטות מנהל, Django מאפשר לך לעשות את זה:
>>> SomeModel.objects.custom_query ()
... אבל זה לא ייתן לך לעשות את זה:
>>> SomeModel.objects.custom_query (). Another_custom_query ()
... אלא אם כן אתה לשכפל השיטות שלך ולהגדיר תת queryset מיותר ... עד עכשיו.
עם DelegateManager ו@delegate, אתה יכול לכתוב היגיון מותאם אישית שאילתא לתחזוקה עם שרשור ללא תשלום. במקום להגדיר שיטות מנהל, אתה מגדיר את שיטות queryset, לקשט אותם ברצונך להאציל, ותת DelegateManager שתי שורות המפרטים את queryset. ET VIOLA. כמו כל כך:
מDelegateManager יבוא הנציג, להאציל
הכיתה CustomQuerySet (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (עצמי, some_value):
& Nbsp; self.filter תמורה (some_param__icontains = some_value)
& Nbsp; def 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. שני subclasses QuerySet אלה פועלים באופן זהה:
מDelegateQuerySet יבוא הנציג, להאציל
ManualDelegator כיתה (models.query.QuerySet):
& Nbsp;delegate
& Nbsp; def qs_method (עצמי):
& Nbsp; # ...
הכיתה AutomaticDelegator (DelegateQuerySet):
& Nbsp; def qs_method (עצמי):
& Nbsp; # ...
ניתן גם להחיל מעצבdelegate ישירות לכיתה - זה מאפשר לך להאציל את כל השיטות בכיתה מבלי לשבש שרשרת הירושה שלה. דוגמא זו עובדת באופן זהה לשתי הקודמים:
מנציג יבוא נציג
delegate
הכיתה CustomQuerySet (models.query.QuerySet):
& Nbsp; def qs_method (עצמי, some_value):
& Nbsp; תשואה self.filter(some_param__icontains=some_value)
Requirements:
- Python
- Django
תגובות לא נמצא