Skip to content

Commit 25f59ad

Browse files
committed
Complete existent documentation on some sections
1 parent c374e5f commit 25f59ad

File tree

1 file changed

+31
-17
lines changed

1 file changed

+31
-17
lines changed

docs/third-party/webdev/django/models.md

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,7 @@ erDiagram
11161116

11171117
> :material-alarm-light-outline:{.hl} Un «post» tiene cero o muchos comentarios, pero un comentario está relacionado con un único «post».
11181118

1119-
Para relacionar ambos modelos usamos un campo de tipo [`ForeignKey`](https://docs.djangoproject.com/en/stable/ref/models/fields/#foreignkey):
1119+
Partimos de un modelo de «post» habitual:
11201120

11211121
```python title="posts/models.py"
11221122
from django.db import models
@@ -1128,14 +1128,19 @@ class Post(models.Model):
11281128
content = models.TextField()
11291129
```
11301130

1131-
```python title="comments/models.py" hl_lines="4-8"
1131+
Para relacionar ambos modelos usamos un campo de tipo [`ForeignKey`](https://docs.djangoproject.com/en/stable/ref/models/fields/#foreignkey):
1132+
1133+
```python title="comments/models.py" hl_lines="7-11"
1134+
from django.db import models
1135+
1136+
11321137
class Comment(models.Model):
11331138
alias = models.CharField(max_length=128)
1134-
content = models.TextField(max_length=256)
1139+
content = models.TextField()
11351140
post = models.ForeignKey(
1136-
'posts.Post',
1137-
related_name='comments',
1138-
on_delete=models.CASCADE
1141+
'posts.Post', # Modelo relacionado
1142+
related_name='comments', # Nombre relacionado
1143+
on_delete=models.CASCADE # Acción de borrado
11391144
)
11401145
```
11411146

@@ -1264,7 +1269,7 @@ from django.db import models
12641269

12651270

12661271
class Comment(models.Model):
1267-
content = models.TextField(max_length=256)
1272+
content = models.TextField()
12681273
post = models.ForeignKey(
12691274
'posts.Post',
12701275
related_name='comments',
@@ -1389,7 +1394,7 @@ erDiagram
13891394
Como se puede observar, se trata de una relación `1:1` por lo que vamos a utilizar la clase [`OneToOneField()`](#one-to-one) que proporciona Django. La implementación sería la siguiente:
13901395

13911396
```python title="users/models.py" hl_lines="6-10"
1392-
from django import models
1397+
from django.db import models
13931398
from django.conf import settings
13941399

13951400

@@ -1853,15 +1858,18 @@ Las dos opciones de las que disponemos son [`FileField`](https://docs.djangoproj
18531858

18541859
Vamos a partir de un <span class="example">ejemplo:material-flash:</span> en el que modelamos un «post» añadiendo una imagen de _portada_. Para ello añadimos un nuevo campo `cover` al modelo que será de tipo `ImageField`:
18551860

1856-
```python title="posts/models.py" hl_lines="8"
1857-
from django import models
1861+
```python title="posts/models.py" hl_lines="8-11"
1862+
from django.db import models
18581863

18591864

18601865
class Post(models.Model):
18611866
title = models.CharField(max_length=256)
18621867
slug = models.SlugField(unique=True, max_length=256)
18631868
content = models.TextField()
1864-
cover = models.ImageField(uploads_to='covers', default='covers/nocover.png')
1869+
cover = models.ImageField(
1870+
uploads_to='covers',
1871+
default='covers/nocover.png'
1872+
)
18651873
```
18661874

18671875
Analicemos cada parámetro de `ImageField` por separado:
@@ -1896,7 +1904,7 @@ Analicemos cada parámetro de `ImageField` por separado:
18961904

18971905
### Ruta del fichero { #file-field-path }
18981906

1899-
Django ofrece la posibilidad de modificar la configuración [`settings.MEDIA_ROOT`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-MEDIA_ROOT) para indicar la ruta «base» donde se va a almacenar este tipo de valores en el **sistema de ficheros**.
1907+
Django ofrece la posibilidad de modificar la configuración [`settings.MEDIA_ROOT`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-MEDIA_ROOT) para indicar la ruta «base» donde se van a almacenar este tipo de recursos en el **sistema de ficheros**.
19001908

19011909
Suele ser una **buena práctica** establecer `#!python '/media'` como la carpeta para la subida de ficheros:
19021910

@@ -1907,15 +1915,21 @@ MEDIA_ROOT = BASE_DIR / 'media'#(1)!
19071915

19081916
1. `BASE_DIR` es una variable definida al comienzo de `settings.py` y que contiene la **ruta absoluta** a la raíz de nuestro proyecto Django.
19091917

1910-
Por tanto, si subimos un fichero `#!python 'tech.png'` como portada de un «post», la ruta en el sistema de ficheros donde se guardará será `<project-path>/media/covers/tech.png`.
1918+
Por tanto, si subimos un fichero `#!python 'tech.jpg'` como portada de un «post», la ruta en el sistema de ficheros donde se guardará (partiendo del raíz del proyecto) será:
1919+
1920+
``` title="blog"
1921+
media
1922+
└── covers
1923+
└── tech.jpg
1924+
```
19111925

19121926
!!! note "Ruta en disco"
19131927

19141928
Dado un objeto `post` de tipo `Post` podemos acceder a la ^^ruta en disco^^ de su fichero de portada mediante `post.cover.path`.
19151929

19161930
### URL del fichero { #file-field-url }
19171931

1918-
Supongamos un <span class="example">ejemplo:material-flash:</span> en el que pasamos un objeto `post` de tipo `Post` a una plantilla para renderizar su contenido. El acceso a la URL del fichero es muy sencillo:
1932+
Supongamos un <span class="example">ejemplo:material-flash:</span> en el que pasamos un objeto `post` de tipo `Post` a una plantilla para renderizar su contenido. El acceso a la URL de la portada del «post» es muy sencillo:
19191933

19201934
```htmldjango title="posts/templates/posts/post/detail.html" hl_lines="3"
19211935
<div class="post">
@@ -1936,7 +1950,7 @@ MEDIA_URL = 'media/'
19361950

19371951
!!! note "URL de acceso"
19381952

1939-
Si subimos un fichero `#!python 'tech.png'` como portada de un «post», la ^^URL de acceso^^ será `#!python http://<project-domain>/media/covers/tech.png`.
1953+
Si subimos un fichero `#!python 'tech.jpg'` como portada de un «post», la ^^URL de acceso^^ será: `#!python http://localhost:8000/media/covers/tech.jpg`.
19401954

19411955
### Servidor de desarrollo { #file-fields-devserver }
19421956

@@ -1966,7 +1980,7 @@ Una de las operaciones más habituales cuando manejamos `FileField` o `ImageFiel
19661980

19671981
#### Gestión del formulario { #file-uploads-form }
19681982

1969-
En este caso vamos a poner un <span class="example">ejemplo:material-flash:</span> de añadir un «post» utilizando un [formulario de modelo](forms.md#model-forms) para ello:
1983+
En este caso vamos a poner el <span class="example">ejemplo:material-flash:</span> de añadir un «post» que tiene imagen de portada («cover») utilizando un [formulario de modelo](forms.md#model-forms) para ello:
19701984

19711985
```python title="posts/forms.py"
19721986
from django import forms
@@ -2130,7 +2144,7 @@ Hemos visto ya [cómo ordenar resultados de consultas](#ordering) pero Django ta
21302144
Supongamos por <span class="example">ejemplo:material-flash:</span> que queremos que todos los «posts» de nuestro «blog» se ordenen siempre por su título de forma ascendente. Tendríamos que hacer lo siguiente:
21312145

21322146
```python title='posts/models.py' hl_lines="9-10"
2133-
from django import models
2147+
from django.db import models
21342148

21352149

21362150
class Post(models.Model):

0 commit comments

Comments
 (0)