Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/tutorial/code-structure.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -183,7 +183,7 @@ And this ends up *requiring* the same **circular imports** that are not supporte

But these **type annotations** we want to declare are not needed at *runtime*.

In fact, remember that we used `List["Hero"]`, with a `"Hero"` in a string?
In fact, remember that we used `list["Hero"]`, with a `"Hero"` in a string?

For Python, at runtime, that is **just a string**.

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial/fastapi/response-model.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ For example, we can pass the same `Hero` **SQLModel** class (because it is also

We can also use other type annotations, the same way we can use with Pydantic fields. For example, we can pass a list of `Hero`s.

First, we import `List` from `typing` and then we declare the `response_model` with `List[Hero]`:
To do so, we declare the `response_model` with `list[Hero]`:

{* ./docs_src/tutorial/fastapi/response_model/tutorial001_py310.py ln[40:44] hl[40] *}

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial/many-to-many/create-models-with-link.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,7 @@ Let's see the `Team` model, it's almost identical as before, but with a little c

{* ./docs_src/tutorial/many_to_many/tutorial001_py310.py ln[9:14] hl[14] *}

The **relationship attribute `heroes`** is still a list of heroes, annotated as `List["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).
The **relationship attribute `heroes`** is still a list of heroes, annotated as `list["Hero"]`. Again, we use `"Hero"` in quotes because we haven't declared that class yet by this point in the code (but as you know, editors and **SQLModel** understand that).

We use the same **`Relationship()`** function.

Expand All@@ -46,7 +46,7 @@ We **removed** the previous `team_id` field (column) because now the relationshi

The relationship attribute is now named **`teams`** instead of `team`, as now we support multiple teams.

It is no longer an `Optional[Team]` but a list of teams, annotated as **`List[Team]`**.
It is no longer an `Optional[Team]` but a list of teams, annotated as **`list[Team]`**.

We are using the **`Relationship()`** here too.

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -86,7 +86,7 @@ And in the `Team` class, the `heroes` attribute is annotated as a list of `Hero`

/// tip

There's a couple of things we'll check again in some of the next chapters, about the `List["Hero"]` and the `back_populates`.
There's a couple of things we'll check again in some of the next chapters, about the `list["Hero"]` and the `back_populates`.

But for now, let's first see how to use these relationship attributes.

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
## About the String in `List["Hero"]`
## About the String in `list["Hero"]`

In the first Relationship attribute, we declare it with `List["Hero"]`, putting the `Hero` in quotes instead of just normally there:
In the first Relationship attribute, we declare it with `list["Hero"]`, putting the `Hero` in quotes instead of just normally there:

{* ./docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py ln[1:19] hl[9] *}

What's that about? Can't we just write it normally as `List[Hero]`?
What's that about? Can't we just write it normally as `list[Hero]`?

By that point, in that line in the code, the Python interpreter **doesn't know of any class `Hero`**, and if we put it just there, it would try to find it unsuccessfully, and then fail. 😭

Expand Down