Django ORM (Querysets)
Այս գլխում դուք կսովորեք, թե ինչպես է Django- ն միանում և պահում տեղեկատվությունը տվյալների բազայում: Եկեք սկսենք:
Ի՞նչ է QuerySet- ը:
QuerySet- ը, ըստ էության, տվյալ Մոդելի օբյեկտների ցուցակն է: QuerySets- ը թույլ է տալիս կարդալ տվյալների բազան, զտել և փոխել դրանց կարգը:
Օրինակով սովորելը ամենահեշտն է: Փորձենք սա, այնպես չէ՞:
Django shell
Բացեք ձեր տեղական վահանակը (ոչ PythonAnywhere- ում) և մուտքագրեք այս հրամանը.
Արդյունքն այսպիսին պետք է լինի.
Դուք այժմ Django- ի ինտերակտիվ վահանակում եք: Դա ճիշտ է Python- ի հուշման նման, բայց ինչ-որ լրացուցիչ Django մոգությամբ: :) Այստեղ կարող եք օգտագործել Python- ի բոլոր հրամանները:
Բոլոր օբյեկտները
Փորձենք նախ ցուցադրել մեր բոլոր հաղորդագրությունները: Դա կարող եք անել հետևյալ հրահանգով.
Վայ Սխալ առաջացավ: Այն մեզ ասում է, որ Փոստ չկա: Եվ դա ճիշտ է. Մենք մոռացել ենք ներմուծել այն:
Մենք ներմուծում ենք Post
մոդելը blog.models
-ից:Փորձենք կրկին ստանալ բլոգի բոլոր գրառումները.
Սա ավելի վաղ ստեղծած հաղորդագրությունների ցուցակն է: Մենք ստեղծեցինք այս հաղորդագրությունները Django ադմինիստրատորի ինտերֆեյսի միջոցով: Բայց հիմա մենք ուզում ենք ստեղծել նոր հաղորդագրություններ Python- ի միջոցով, ինչպե՞ս դա անել:
Ստեղծել օբյեկտ
Ահա, թե ինչպես եք դուք ստեղծում նոր Post օբյեկտ տվյալների բազայում/database.
Բայց այստեղ մենք ունենք մեկ պակասող բաղադրիչ ՝ me/ես
: Մենք պետք է որպես հեղինակ փոխանցենք User/Օգտագործող
մոդելի օրինակ: Ինչպե՞ս դա անել:
Եկեք նախ ներմուծենք Օգտագործողի մոդելը/User model.
Ի՞նչ օգտվողներ ունենք մեր տվյալների բազայում/database: Փորձեք այս:
Սա նույն գերշահագործողն է/superuser, որը մենք ստեղծել ենք ավելի վաղ: Այժմ եկեք ստեղծենք օգտագործողի օրինակ (այս տողը հարմարեցրեք ձեր սեփական օգտվողի անվանմանը).
Ինչպես տեսնում եք, մենք այժմ ստանում ենք get
a User
username
/օգտագործող անունով, որը համարժեք է «ola»-ին: Կոկիկ!
Այժմ մենք վերջապես կարող ենք ստեղծել մեր գրառումը.
Ուռա! Ցանկանու՞մ եք ստուգել, արդյո՞ք այն աշխատում է:
Ահա, ևս մեկ գրառում ցուցակում:
Ավելացրեք այլ հաղորդագրություններ
Այժմ կարող եք մի փոքր զվարճանալ և ավելացնել նոր հաղորդագրություններ ՝ տեսնելու համար, թե ինչպես է դա աշխատում: Ավելացրեք ևս երկու-երեքը, ապա անցեք հաջորդ մասին:
Ֆիլտրեք օբյեկտները
QuerySets- ի կարեւոր առանձնահատկությունը օբյեկտները զտելու հնարավորությունն է: Ասենք, որ ուզում ենք գտնել ola օգտվողի հեղինակած բոլոր գրառումնները: Post.objects.all()
–ում all/ամբողջի
փոխարեն մենք կօգտագործենք filter/ֆիլտր
: Փակագծերի մեջ մենք նշելու ենք այն պայմանները, որոնցով կկառուցվի գրառումների ընտրությունը: Մեր դեպքում պայմանն այն է, որ author/հեղինակը
պետք է հավասար լինի me/ինձ
: Django- ում այն կգրվի այսպես author=me
: Մեր ծածկագիրն այժմ ունի այսպիսի տեսք.
Կամ գուցե title/վերնագիր
դաշտում ուզում ենք տեսնել բոլոր գրառումները, որոնք պարունակում են «վերնագիր»/'title' բառը:
Նշում որ
title/Վերնագրի
ևcontains/պարունակության
միջև կա երկու ընդգծված նիշ (_
): Django- ի ORM- ն այս կանոնն օգտագործում է դաշտերի անունները («վերնագիր»/"title") և գործողությունները կամ ֆիլտրերն առանձնացնելու համար («պարունակում է»/"contains"): Եթե դուք օգտագործեք միայն մեկ ընդգծում, դուք կստանաք սխալ ՝ "FieldError: Cannot resolve keyword title_contains".
Կարող եք նաև ստանալ բոլոր հրապարակված հաղորդագրությունների ցուցակը: Մենք դա անում ենք ՝ զտելով անցյալում տեղադրված published_date/հրապարակված_ամսաթերթը
բոլոր հաղորդագրությունները:
Ցավոք, գրառումը, որը մենք ավելացրել ենք Python կոնսոլից, դեռ հրապարակված չէ: Բայց մենք կարող ենք դա փոխել: Նախ ընտրենք այն գրառումը, որը մենք ցանկանում ենք հրապարակել.
Եվ այնուհետև հրապարակեք այն մեր publish/հրապարակել
եղանակով:
Այժմ կրկին փորձեք ստանալ հրապարակված հաղորդագրությունների ցուցակը (3 անգամ սեղմեք վեր սլաքը և ապա enter
).
Օբյեկտների կարգավորում
QuerySets- ը թույլ է տալիս տեսակավորել օբյեկտները: Փորձենք տեսակավորել ըստ created_date/ստեղծման_ամսաթիվ
դաշտի.
Կարող ենք նաև հակադարձել հրամանը ՝ սկզբում ավելացնելով սա -
Բարդ հարցումներ մեթոդի շղթայացման միջոցով
Ինչպես տեսնում եք, Post.objects
- ի որոշ մեթոդներ վերադարձնում են QuerySet- ը: Նույն մեթոդները կարելի է կրկին կանչել QuerySet- ում, և նրանք կվերադարձնեն նոր QuerySet: Այս կերպ Դուք կարող եք շղթայել դրանց ազդեցությունը ՝ դրանք միմյանց chaining/կապակցելով:
Սա իսկապես հզոր է և թույլ է տալիս գրել բավականին բարդ հարցումներ:
Գերազանց է! Այժմ դուք պատրաստ եք հաջորդ մասի: Ինտերակտիվ վահանակը/shell փակելու համար մուտքագրեք ՝
Last updated