313 lines
45 KiB
JSON
313 lines
45 KiB
JSON
{
|
||
"main": {
|
||
"id": "5324373015726ba8",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "4334af5869448aa1",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "6ee40f9ce4325b62",
|
||
"type": "leaf",
|
||
"pinned": true,
|
||
"state": {
|
||
"type": "markdown",
|
||
"state": {
|
||
"file": "90 Library/Programming/Web/Основы веб-разработки.md",
|
||
"mode": "preview",
|
||
"source": false,
|
||
"backlinks": false
|
||
},
|
||
"pinned": true,
|
||
"icon": "lucide-file",
|
||
"title": "Основы веб-разработки"
|
||
}
|
||
},
|
||
{
|
||
"id": "28d74d490ab22900",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "markdown",
|
||
"state": {
|
||
"file": "90 Library/Programming/Python/Django: Модели и ORM.md",
|
||
"mode": "source",
|
||
"source": false,
|
||
"backlinks": false
|
||
},
|
||
"icon": "lucide-file",
|
||
"title": "Django: Модели и ORM"
|
||
}
|
||
}
|
||
],
|
||
"currentTab": 1
|
||
}
|
||
],
|
||
"direction": "vertical"
|
||
},
|
||
"left": {
|
||
"id": "a9c2d5e65288011a",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "383cca303cf4b57d",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "27e6486165131cfa",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "file-explorer",
|
||
"state": {
|
||
"sortOrder": "alphabetical",
|
||
"autoReveal": true
|
||
},
|
||
"icon": "lucide-folder-closed",
|
||
"title": "Files"
|
||
}
|
||
},
|
||
{
|
||
"id": "66079465678173e5",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "search",
|
||
"state": {
|
||
"query": "tag:#gym",
|
||
"matchingCase": false,
|
||
"explainSearch": false,
|
||
"collapseAll": false,
|
||
"extraContext": false,
|
||
"sortOrder": "alphabetical"
|
||
},
|
||
"icon": "lucide-search",
|
||
"title": "Search"
|
||
}
|
||
},
|
||
{
|
||
"id": "c2541ce190da912e",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "bookmarks",
|
||
"state": {},
|
||
"icon": "lucide-bookmark",
|
||
"title": "Bookmarks"
|
||
}
|
||
},
|
||
{
|
||
"id": "673ce6e6c09cfc9c",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "tag",
|
||
"state": {
|
||
"sortOrder": "frequency",
|
||
"useHierarchy": true,
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-tags",
|
||
"title": "Tags"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"direction": "horizontal",
|
||
"width": 233,
|
||
"collapsed": true
|
||
},
|
||
"right": {
|
||
"id": "38c591aa0966839e",
|
||
"type": "split",
|
||
"children": [
|
||
{
|
||
"id": "86a193b1d3159ff8",
|
||
"type": "tabs",
|
||
"children": [
|
||
{
|
||
"id": "06940eb960fc1db5",
|
||
"type": "leaf",
|
||
"pinned": true,
|
||
"state": {
|
||
"type": "terminal:terminal",
|
||
"state": {
|
||
"terminal:terminal": {
|
||
"cwd": "/home/ada/Documents/Vaults/SecondBrain",
|
||
"focus": false,
|
||
"profile": {
|
||
"args": [
|
||
"--login"
|
||
],
|
||
"executable": "/usr/bin/zsh",
|
||
"followTheme": true,
|
||
"name": "ZSH",
|
||
"platforms": {
|
||
"darwin": false,
|
||
"linux": true
|
||
},
|
||
"pythonExecutable": "python3",
|
||
"restoreHistory": true,
|
||
"rightClickAction": "copyPaste",
|
||
"successExitCodes": [
|
||
"0",
|
||
"SIGINT",
|
||
"SIGTERM"
|
||
],
|
||
"terminalOptions": {
|
||
"fontFamily": "FiraCode Nerd Font Mono",
|
||
"documentOverride": null
|
||
},
|
||
"type": "integrated",
|
||
"useWin32Conhost": false
|
||
},
|
||
"profileSourceId": "7004edff-76db-412f-95d3-5fd8e180d055",
|
||
"serial": {
|
||
"columns": 44,
|
||
"data": "\r\n\u001b[2m│ >_ \u001b[1;22mOpenAI Codex\u001b[22;2m (v0.135.0)\r\n│\r\n│\r\n│\r\n│ model: \u001b[0mgpt-5.5 medium\u001b[2m \u001b[36;22m/model\u001b[39;2m to\r\nchange │\r\n│ directory: \u001b[0m~/…/Vaults/SecondBrain\r\n\u001b[2m│\r\n╰───────────────────────────────────────────\r\n───╯\r\n\r\n\u001b[0m \u001b[1mTip:\u001b[0m Use /mcp to list configured MCP\r\n tools.\r\n\r\n\u001b[48;5;238m\u001b[44X\r\n\u001b[1;2m› \u001b[22;22m\"90 Library/Programming/Python/Django:\u001b[4X\r\n Модели и ORM.md\" в типах полей пропиши\u001b[4X\r\n для каждого типа маленькое пояснение\u001b[6X\r\n\u001b[44X\r\n\u001b[0m\r\n\u001b[2m• \u001b[0mПлан: прочитаю заметку и шаблон/соседний\r\n стиль, затем точечно допишу короткие\r\n пояснения в разделе типов полей без\r\n изменения остальной структуры.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\u001b[2m, \u001b[0mDjango: Модели и ORM.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"типы полей|Field|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mCharField|TextField|IntegerField\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mLibrary/Programming'\r\n\u001b[39;2m └ 11 matches in 1F:\r\n … +20 lines (ctrl + t to view\r\n transcript)\r\n\u001b[0m \u001b[2mLookups)\r\n\r\n\r\n────────────────────────────────────────────\r\n\r\n• \u001b[0mНашёл нужный раздел: сейчас типы полей\r\n перечислены группами, у \u001b[36mAutoField\r\n\u001b[0m пояснение пустое. Внесу только короткие\r\n пояснения и переведу статус заметки в\r\n \u001b[36mprocessing\u001b[0m, потому что файл редактируется.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Python/\r\nDjango: Модели и ORM.md (\u001b[32m+12\u001b[0m \u001b[31m-6\u001b[0m)\r\n \u001b[2m 1 \u001b[0m \u001b[38;2;147;153;178m---\r\n\u001b[39;48;5;52m \u001b[2m 2 \u001b[31;22m-\u001b[38;2;205;214;244;2mstatus: seed\u001b[24X\r\n\u001b[39;48;5;22;22m \u001b[2m 2 \u001b[32;22m+\u001b[38;2;205;214;244mstatus: processing\u001b[18X\r\n\u001b[0m \u001b[2m 3 \u001b[0m \u001b[38;2;205;214;244mtype: concept\u001b[23X\r\n\u001b[0m \u001b[2m ⋮\r\n\u001b[0m \u001b[2m35 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mТипы полей\r\n\u001b[39;48;5;52m \u001b[2m36 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mAutoField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m -\u001b[21X\r\n\u001b[39;22m \u001b[2m37 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mCharField(max_length=N)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mTextFi\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244meld\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;22m \u001b[2m38 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mIntegerField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDecimalField(max_\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mdigits, decimal_places)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;22m \u001b[2m39 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mBooleanField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDateField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDate\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mTimeField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;22m \u001b[2m40 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mEmailField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mFileField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mImageF\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mield\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;48;5;22;22m \u001b[2m36 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mAutoField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — автоинкрементный чис\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mловой первичный ключ.\r\n\u001b[39m \u001b[2m37 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mCharField(max_length=N)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — коротк\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mая строка фиксированной максимальной\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m длины.\r\n\u001b[39m \u001b[2m38 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mTextField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — длинный текст без об\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mязательного ограничения длины.\r\n\u001b[39m \u001b[2m39 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mIntegerField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — целое число.\r\n\u001b[39m \u001b[2m40 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDecimalField(max_digits, decimal_\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mие \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mTrue\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m/\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mFalse\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m42 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDateField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — дата без времени.\r\n\u001b[39m \u001b[2m43 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDateTimeField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — дата и время.\r\n\u001b[39m \u001b[2m44 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mEmailField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — строка с валидацией\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m email-адреса.\r\n\u001b[39m \u001b[2m45 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mFileField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — путь к загруженному\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mфайлу.\r\n\u001b[39m \u001b[2m46 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mImageField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — файл изображения с\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mдополнительной проверкой формата.\r\n\u001b[0m \u001b[2m47\u001b[38X\r\n\r\n\u001b[32;1;22m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m grep\u001b[38;2;147;153;178m -\u001b[38;2;235;160;172mn\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m\"Django: Модели и ORM|\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mDjango Модели\"\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/INDEX.md'\r\n\u001b[39;2m └ 1 matches in 1F:\r\n\r\n … +3 lines (ctrl + t to view transcript)\r\n\u001b[0m \u001b[2mbackend, or...\r\n\r\n• \u001b[0mТак как изменился frontmatter, обновляю\r\n соответствующую строку в индексе, без\r\n полной регенерации всего файла.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m INDEX.md\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 99 System/INDEX.md (\u001b[32m+1\u001b[0m \u001b[31m-1\u001b[0m)\r\n \u001b[2m523 \u001b[0m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m---------\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m-------\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m--------\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m------\u001b[38;2;147;153;178m|\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22m------\u001b[38;2;147;153;178m|\r\n\u001b[39;48;5;52m \u001b[2m524 \u001b[31;22m-\u001b[38;2;147;153;178;2m|\u001b[38;2;205;214;244m [[Django\u001b[38;2;147;153;178m:\u001b[38;2;205;214;244m Модели и ORM]] \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Django\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m:\u001b[38;2;205;214;244m Модели и ORM \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m seed \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m concept \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m [\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mdjango, backend, orm, database, mig\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mrations] \u001b[38;2;147;153;178m|\r\n\u001b[39;48;5;22;22m \u001b[2m524 \u001b[32;22m+\u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m [[Django: Модели и ORM]] \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m Django\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m: Модели и ORM \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m processing \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m conce\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mpt \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m [django, backend, orm, databas\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22me, migrations] \u001b[38;2;147;153;178m|\r\n\u001b[0m \u001b[2m525 \u001b[0m \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m [[Django: Представления, шаблоны\u001b[1X\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mблоны и CBV \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m seed \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m concept \u001b[38;2;147;153;178m|\u001b[38;2;205;214;244m [dja\r\n\u001b[0m \u001b[2m \u001b[38;2;205;214;244;22mngo, routing, templates, cbv, fbv]\r\n\u001b[0m \u001b[2m \u001b[38;2;147;153;178;22m|\r\n\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90 Library/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProgramming/Python/Django: Модели и\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mORM.md'\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'99 System/INDEX.md'\r\n\u001b[39;2m └ .../Programming/Python/Django: Модели и\r\n\u001b[0m \u001b[2m +1 -1\r\n\r\n────────────────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n В \u001b[36m90 Library/Programming/Python/Django:\r\n\u001b[0m \u001b[36mМодели и ORM.md:35\u001b[0m в разделе «Типы полей»\r\n добавил короткое пояснение для каждого\r\n типа поля. Статус заметки перевёл в\r\n \u001b[36mprocessing\u001b[0m и обновил строку в \u001b[36m99 System/\r\n\u001b[0m \u001b[36mINDEX.md:524\u001b[0m.\r\n\r\n\u001b[2m────────────────────────────────────────────\r\n\r\n\u001b[48;5;238;22m\u001b[44X\r\n\u001b[1;2m› \u001b[22;22mотношения тоже распиши, касательно,\r\n `on_delete'\r\n\r\n\u001b[0m\u001b[44X\r\n\u001b[2m• \u001b[0mПлан: расширю только блок «Отношения»:\r\n коротко поясню каждый тип связи и распишу\r\n варианты \u001b[36mon_delete\u001b[0m без затрагивания\r\n остальных разделов.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Django: Модели и ORM.md\r\n\r\n\u001b[2m────────────────────────────────────────────\r\n\r\n• \u001b[0mРедактирую этот небольшой блок: оставляю\r\n формат списка, добавляю смысл \u001b[36mon_delete\u001b[0m и\r\n отмечаю, что для \u001b[36mSET_NULL\u001b[0m нужно \u001b[36mnull=True\u001b[0m,\r\n а для \u001b[36mSET_DEFAULT\u001b[0m нужен \u001b[36mdefault\u001b[0m.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Python/\r\nDjango: Модели и ORM.md (\u001b[32m+10\u001b[0m \u001b[31m-4\u001b[0m)\r\n \u001b[2m48 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mОтношения\r\n\u001b[39;48;5;52m \u001b[2m49 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mForeignKey(Target, on_delete=mode\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mls.CASCADE)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — Один ко многим.\r\n\u001b[39;22m \u001b[2m50 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mOneToOneField(Target, on_delete=m\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244models.CASCADE)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — Один к одному.\r\n\u001b[39;22m \u001b[2m51 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mManyToManyField(Target)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — Многие\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244m ко многим.\r\n\u001b[39;22m \u001b[2m52 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mon_delete:\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mCASCADE\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mPROTECT\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mSET_NULL\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mSET_DEFAULT\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDO_NO\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mTHING\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39;48;5;22;22m \u001b[2m49 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mForeignKey(Target, on_delete=...)\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m`\u001b[38;2;205;214;244m — связь «один ко многим»: у одной\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m..)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — связь «один к одному»: каждой\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m записи соответствует максимум одна\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mсвязанная запись.\r\n\u001b[39m \u001b[2m51 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mManyToManyField(Target)\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — связь\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m«многие ко многим»: записи обеих мод\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mелей могут ссылаться на несколько за\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mписей другой модели.\r\n\u001b[39m \u001b[2m52 \u001b[32;22m+\r\n\u001b[39m \u001b[2m53 \u001b[32;22m+\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mon_delete\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m задаёт, что делать с тек\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mущей записью, если удаляется связанн\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mая запись \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mTarget\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m:\r\n\u001b[39m \u001b[2m54 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mCASCADE\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — удалить текущую запись\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m вместе со связанной.\r\n\u001b[39m \u001b[2m55 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mPROTECT\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — запретить удаление свя\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mзанной записи, пока на неё есть ссыл\r\n\u001b[39m \u001b[2m56 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mSET_NULL\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — записать \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mNULL\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m в пол\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mе связи; требует \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mnull=True\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m57 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mSET_DEFAULT\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — записать значение\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mпо умолчанию; требует \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mdefault\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mётся на БД и разработчике.\r\n\u001b[0m \u001b[2m59\u001b[38X\r\n\r\n•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Django: Модели и ORM.md\r\n\u001b[2m │ \u001b[38;2;166;227;161;22mORM.md'\r\n\u001b[39;2m └\r\n\r\n────────────────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n В \u001b[36m90 Library/Programming/Python/Django:\r\n\u001b[0m \u001b[36mМодели и ORM.md:48\u001b[0m расписал отношения и\r\n отдельно пояснил варианты \u001b[36mon_delete\u001b[0m:\r\n \u001b[36mCASCADE\u001b[0m, \u001b[36mPROTECT\u001b[0m, \u001b[36mSET_NULL\u001b[0m, \u001b[36mSET_DEFAULT\u001b[0m,\r\n \u001b[36mDO_NOTHING\u001b[0m.\r\n\r\n\u001b[2m────────────────────────────────────────────\r\n\r\n\u001b[48;5;238;22m\u001b[44X\r\n\u001b[1;2m› \u001b[22;22mРаспиши простым языком Оптимизацию,\r\n Агрегацию и Логические условия\r\n\r\n\u001b[0m\u001b[44X\r\n\u001b[2m• \u001b[0mПлан: прочитаю три нужных блока, затем\r\n перепишу их простым языком без добавления\r\n новых тем и без изменения остальной\r\n заметки.\r\n\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Django: Модели и ORM.md\r\n\r\n\u001b[2m────────────────────────────────────────────\r\n\r\n• \u001b[0mНашёл компактные формулировки. Расширю их\r\n до объяснения «зачем это нужно» и коротких\r\n примеров, чтобы осталось учебной заметкой,\r\n а не справочником API.\r\n\r\n\u001b[2m• \u001b[1;22mEdited\u001b[0m 90 Library/Programming/Python/\r\nDjango: Модели и ORM.md (\u001b[32m+14\u001b[0m \u001b[31m-7\u001b[0m)\r\n \u001b[2m 89 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mОптимизация запросов\r\n\u001b[39;48;5;52m \u001b[2m 90 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mselect_related('field')\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: INNER\u001b[1X\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mJOIN для ForeignKey и OneToOne.\r\n\u001b[39;22m \u001b[2m 91 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mprefetch_related('field')\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: 2-й\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mзапрос для ManyToMany и обратных св\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mязей.\r\n\u001b[39;22m \u001b[2m 92 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mПроблема N+1:\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m Возникает при о\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mбращении к связанным полям в цикле\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mбез предварительной подгрузки.\r\n\u001b[39;48;5;22;22m \u001b[2m 90 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mselect_related('field')\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — заран\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mее подтягивает связанную запись чер\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mез \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mJOIN\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m. Подходит для \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mForeignKey\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m`\u001b[38;2;205;214;244m и \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mOneToOneField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m, когда у объект\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mа есть одна связанная запись.\r\n\u001b[39m \u001b[2m 91 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mprefetch_related('field')\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — дел\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mает отдельный запрос за связанными\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mобъектами и собирает их в Python. П\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mодходит для \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mManyToManyField\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m и обр\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mатных связей, где связанных записей\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m может быть много.\r\n\u001b[39m \u001b[2m 92 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m**\u001b[38;2;243;139;168;1mПроблема N+1\u001b[38;2;147;153;178;22m**\u001b[38;2;205;214;244m — ситуация, когд\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mа Django делает один запрос за спис\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mком объектов, а потом ещё по одному\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m запросу на каждый объект в цикле.\r\n\u001b[39m \u001b[2m 93 \u001b[32;22m+\r\n\u001b[39m \u001b[2m 94 \u001b[32;22m+\u001b[38;2;205;214;244mПример: если вывести 100 книг и для\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m каждой обратиться к \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mbook.author\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m,\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m без оптимизации может получиться 1\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22m01 запрос. С \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mselect_related('autho\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mr')\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m авторы будут загружены сразу.\r\n\u001b[0m \u001b[2m 95\u001b[37X\r\n\u001b[0m \u001b[2m 96 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mАгрегация и аннотация\r\n\u001b[39;48;5;52m \u001b[2m 95 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244maggregate(Avg('rating'))\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: терми\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mнальный метод, возвращает словарь.\r\n\u001b[39;22m \u001b[2m 96 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mannotate(total=Count('entries'))\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: добавляет вычисляемое поле к каж\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mдому объекту в выборке.\r\n\u001b[39;48;5;22;22m \u001b[2m 97 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244maggregate(Avg('rating'))\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m — счит\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mает одно итоговое значение по всей\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mвыборке: среднее, сумму, минимум, м\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mаксимум, количество. Возвращает сло\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mварь, а не QuerySet.\r\n\u001b[39m \u001b[2m 98 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mannotate(total=Count('entries'))\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m`\u001b[38;2;205;214;244m — добавляет вычисляемое поле к ка\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mждому объекту в выборке.\r\n\u001b[39m \u001b[2m 99 \u001b[32;22m+\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22me(total=Count('books'))\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m добавит ка\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mждому автору поле \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mtotal\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m с количес\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mтвом его книг.\r\n\u001b[0m \u001b[2m101\u001b[37X\r\n\u001b[0m \u001b[2m102 \u001b[0m \u001b[38;2;147;153;178m###\u001b[38;2;249;226;175m \u001b[38;2;148;226;213mЛогические условия\r\n\u001b[39;48;5;52m \u001b[2m 99 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mQ-объекты\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: Позволяют использова\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mть \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mOR\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m (\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m|\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m), \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mAND\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m (\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m&\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m), \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mNOT\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m (\r\n\u001b[39;22m \u001b[2m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m~\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m).\r\n\u001b[39;22m \u001b[2m100 \u001b[31;22m-\u001b[38;2;147;153;178;2m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mF-выражения\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: Ссылки на поля в Б\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mД (атомарные операции без Race Cond\r\n\u001b[39;22m \u001b[2m \u001b[38;2;205;214;244mition).\r\n\u001b[39;48;5;22;22m \u001b[2m103 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mQ-объекты\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m нужны для сложных усл\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mовий в \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mfilter()\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mOR\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m (\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m|\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m), \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mAND\r\n\u001b[39m \u001b[2m \u001b[38;2;147;153;178;22m`\u001b[38;2;205;214;244m (\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m&\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m), \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mNOT\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m (\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m~\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m).\r\n\u001b[39m \u001b[2m104 \u001b[32;22m+\u001b[38;2;147;153;178m-\u001b[38;2;205;214;244m \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mF-выражения\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m позволяют сравниват\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mь и изменять поля прямо на стороне\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mБД, не загружая значение в Python.\r\n\u001b[39m \u001b[2m105 \u001b[32;22m+\r\n\u001b[39m \u001b[2m106 \u001b[32;22m+\u001b[38;2;205;214;244mПример \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mQ\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: найти книги, где рейтин\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mг выше 4 или название содержит \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mDja\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mngo\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[39m \u001b[2m107 \u001b[32;22m+\u001b[38;2;205;214;244mПример \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mF\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m: увеличить счётчик просм\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mотров на 1 прямо в БД: \u001b[38;2;147;153;178m`\u001b[38;2;205;214;244mviews = F('\r\n\u001b[39m \u001b[2m \u001b[38;2;205;214;244;22mviews') + 1\u001b[38;2;147;153;178m`\u001b[38;2;205;214;244m.\r\n\u001b[0m\u001b[44X\r\n\u001b[2m•\u001b[0m \u001b[1mExplored\r\n\u001b[22;2m └ \u001b[36;22mRead\u001b[0m Django: Модели и ORM.md\r\n\r\n\u001b[32;1m•\u001b[0m \u001b[1mRan\u001b[0m \u001b[38;2;137;180;250mrtk\u001b[38;2;205;214;244m git diff\u001b[38;2;148;226;213m --\u001b[38;2;205;214;244m \u001b[38;2;166;227;161m'90 Library/\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mProgramming/Python/Django: Модели и\r\n\u001b[39;2m │ \u001b[38;2;166;227;161;22mORM.md'\r\n\u001b[39;2m └ .../Programming/Python/Django: Модели и\r\n … +38 lines (ctrl + t to view\r\n transcript)\r\n\u001b[0m \u001b[2mF('views') + 1`.\r\n\u001b[0m \u001b[2m +14 -7\r\n\r\n────────────────────────────────────────────\r\n\r\n• \u001b[0mГотово.\r\n\r\n В \u001b[36m90 Library/Programming/Python/Django:\r\n\u001b[0m \u001b[36mМодели и ORM.md:88\u001b[0m простым языком\r\n расписал:\r\n\r\n - оптимизацию запросов: \u001b[36mselect_related\u001b[0m,\r\n \u001b[36mprefetch_related\u001b[0m, проблему N+1;\r\n\r\n - агрегацию и аннотацию;\r\n - логические условия: \u001b[36mQ\u001b[0m и \u001b[36mF\u001b[0m-выражения.\r\n\r\n\u001b[2m────────────────────────────────────────────\r\n\r\n\u001b[48;5;238;22m \u001b[43X\r\n\u001b[1m›\u001b[22m \u001b[2mSummarize recent commits\r\n\u001b[22m \r\n\u001b[0m\u001b[2X\u001b[2C\u001b[38;2;246;226;183mgpt-5.5 medium\u001b[39;2m · \u001b[38;2;171;223;167;22m~/Documents/Vaults/Secon…\u001b[2A\u001b[42D\u001b[0m",
|
||
"rows": 34,
|
||
"scrollLine": -1
|
||
}
|
||
}
|
||
},
|
||
"pinned": true,
|
||
"icon": "terminal",
|
||
"title": "Terminal: SecondBrain"
|
||
}
|
||
},
|
||
{
|
||
"id": "394fb6e28d09b8f3",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "all-properties",
|
||
"state": {
|
||
"sortOrder": "frequency",
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-archive",
|
||
"title": "All properties"
|
||
}
|
||
},
|
||
{
|
||
"id": "e51be669e29cd994",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "backlink",
|
||
"state": {
|
||
"file": "90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"collapseAll": false,
|
||
"extraContext": false,
|
||
"sortOrder": "alphabetical",
|
||
"showSearch": false,
|
||
"searchQuery": "",
|
||
"backlinkCollapsed": false,
|
||
"unlinkedCollapsed": true
|
||
},
|
||
"icon": "links-coming-in",
|
||
"title": "Backlinks for Основы HTML (структура, таблицы, формы)"
|
||
}
|
||
},
|
||
{
|
||
"id": "86ea4ddeaafff092",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "outgoing-link",
|
||
"state": {
|
||
"file": "90 Library/Programming/Ruby On Rails/Sidekiq - основа работы.md",
|
||
"linksCollapsed": false,
|
||
"unlinkedCollapsed": true
|
||
},
|
||
"icon": "links-going-out",
|
||
"title": "Outgoing links from Sidekiq - основа работы"
|
||
}
|
||
},
|
||
{
|
||
"id": "a0ffd3bace615787",
|
||
"type": "leaf",
|
||
"state": {
|
||
"type": "outline",
|
||
"state": {
|
||
"file": "90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"followCursor": false,
|
||
"showSearch": false,
|
||
"searchQuery": ""
|
||
},
|
||
"icon": "lucide-list",
|
||
"title": "Outline of Основы HTML (структура, таблицы, формы)"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"direction": "horizontal",
|
||
"width": 446
|
||
},
|
||
"left-ribbon": {
|
||
"hiddenItems": {
|
||
"switcher:Open quick switcher": false,
|
||
"graph:Open graph view": false,
|
||
"canvas:Create new canvas": false,
|
||
"daily-notes:Open today's daily note": false,
|
||
"templates:Insert template": false,
|
||
"command-palette:Open command palette": false,
|
||
"markdown-importer:Open format converter": false,
|
||
"random-note:Open random note": false,
|
||
"audio-recorder:Start/stop recording": false,
|
||
"bases:Create new base": false,
|
||
"omnisearch:Omnisearch": false,
|
||
"templater-obsidian:Templater": false,
|
||
"obsidian-git:Open Git source control": false,
|
||
"obsidian-excalidraw-plugin:New drawing": false,
|
||
"terminal:Open terminal": false
|
||
}
|
||
},
|
||
"active": "06940eb960fc1db5",
|
||
"lastOpenFiles": [
|
||
"90 Library/Programming/Python/Django: Модели и ORM.md",
|
||
"90 Library/Programming/Python/Курс по Python и Django.md",
|
||
"90 Library/Programming/Web/CSS: Адаптивность, Flexbox и Grid.md",
|
||
"90 Library/Programming/Web/Основы веб-разработки.md",
|
||
"90 Library/Programming/Web/Основы HTML (структура, таблицы, формы).md",
|
||
"AGENTS.md",
|
||
"90 Library/Programming/Web/CSS: Основы, селекторы и блочная модель.md",
|
||
"CODEX.md",
|
||
"GEMINI.md",
|
||
"CLAUDE.md",
|
||
"90 Library/Finance/Инвестиции/Антихрупкость как управляемая асимметрия.md",
|
||
"90 Library/Finance/Инвестиции/Антихрупкость.md",
|
||
"90 Library/Finance/Инвестиции/Заметки в инвестировании.md",
|
||
"99 System/Archive/04 Tools/🛠️ Неоконченные заметки.md",
|
||
"99 System/Archive/04 Tools/StudyTracker/StudyTracker.md",
|
||
"99 System/Archive/04 Tools/StudyTracker/Books/Books.md",
|
||
"99 System/Archive/04 Tools/StudyTracker/Courses/Courses.md",
|
||
"90 Library/Networking/Основы сетевых технологий.md",
|
||
"90 Library/Machine Learning/Data Science с нуля.md",
|
||
"90 Library/DevOps/Курс по DevOps от Merion.md",
|
||
"90 Library/Networking/Компьютерные сети.md",
|
||
"90 Library/Machine Learning/Грокаем Глубокое Обучение.md",
|
||
"90 Library/Finance/Инвестиции/Рискуя собственной шкурой.md",
|
||
"90 Library/Finance/Инвестиции/Психология денег.md",
|
||
"90 Library/Finance/Инвестиции/Черный лебедь.md",
|
||
"90 Library/Finance/Инвестиции/На пенсию в 35.md",
|
||
"99 System/Archive/04 Tools/StudyTracker/Courses",
|
||
"99 System/Archive/04 Tools/StudyTracker/Books",
|
||
"99 System/Archive/04 Tools/StudyTracker",
|
||
"99 System/Archive/04 Tools",
|
||
"99 System/Archive/SocialBase/04 Другие",
|
||
"99 System/Archive/SocialBase/03 Коллеги",
|
||
"99 System/Archive/SocialBase/02 Друзья",
|
||
"99 System/Archive/SocialBase/01 Семья",
|
||
"99 System/Archive/SocialBase",
|
||
"90 Library/Programming/Ruby",
|
||
"99 System/Cache/Pasted image 20260526204029.png",
|
||
"99 System/Cache/Pasted image 20260526203848.png",
|
||
"99 System/Cache/Pasted image 20260526203807.png",
|
||
"99 System/Cache/Pasted image 20260521134256.png",
|
||
"99 System/Cache/Pasted image 20260521134238.png",
|
||
"99 System/Cache/Pasted image 20260521134228.png",
|
||
"99 System/Cache/Pasted image 20260521134207.png",
|
||
"99 System/Cache/Pasted image 20260521133832.png",
|
||
"99 System/Cache/Pasted image 20260521133824.png",
|
||
"99 System/Cache/Pasted image 20260521133344.png",
|
||
"00 Inbox/Untitled.canvas"
|
||
]
|
||
} |