Hola y bienvenidos a otro Django
para que todos caminen.
Así que probablemente estés en este punto
trabajando en tu asignación de autos.
Esta es nuestra primera
tarea real de crear, leer, actualizar y eliminar.
Mucho de lo que es esta tarea,
es mirar el código
que te he dado en DJ4E Samples y sacarlo.
No clone el repositorio para esta asignación.
El DJ4E Samples es un monstruo.
Tiene todo tipo de cosas en
él, es demasiado complejo y no quieres.
Quieres empezar con una aplicación agradable y limpia.
Su tarea anterior era hacer
una aplicación muy pequeña hacia abajo,
vamos a extender esa aplicación.
Es por eso que ya tienes
estos proyectos DJ4E en tu lugar donde estés.
Entonces, lo que esto
es, es
que esta asignación es evolucionar usando el código de muestra.
Pero lo que realmente voy a
hacer es caminar a través
del código de muestra porque hay
nuevos conceptos en este código de muestra.
Entonces, esta es más una conferencia sobre
el código de muestra que exactamente cómo hacer la asignación.
Pero es importante
entender cada línea porque literalmente,
cada programa que vamos a escribir para
las próximas n semanas es una variación en este CRUD.
Así que estas vistas predeterminadas,
el get 404,
todas esas cosas son una base realmente en muchas cosas.
Lo que vamos a encontrar es la
forma correcta de escribir este código,
como todo en Django,
es realmente pequeño y conciso.
Así que echemos un vistazo al código.
Bueno, vamos a seguir adelante y ejecutar el código.
Ve a autos, y tienes que iniciar sesión.
Así que la idea de esto es que hay dos tablas.
Hay una tabla de marcas.
Así que voy a añadir una marca
y luego voy a añadir un auto,
y lo bueno de esto es esto es Neon
1, kilometraje 1.234, SakalCard.
Entonces tengo este menú desplegable genial.
Así que hay un montón de formularios pasando aquí,
hay desplegables, hay una
relación de muchos a uno en curso.
Luego tengo esta lista y puedo actualizarla y eliminarla.
Así que ahí es donde está nuestro CRUD completo.
Así que podemos agregar marcas,
ver marcas, agregar autos, etc.
Así que esa es toda la muestra.
Así que está muy cerca de lo que es que tienes que escribir,
es sólo que no vayas a agarrar y todas esas cosas.
Así que empecemos echando un vistazo.
Así que estoy aquí sentado en mis muestras de DJ4E.
Si miras, ves todas
mis diversas aplicaciones en un proyecto.
Así que tenemos los autos,
pero realmente quiero comenzar con el código de autenticación,
si vuelvo aquí a las muestras,
déjame cerrar la sesión, el código que me permite iniciar sesión.
Así que si voy directo a autos para ver si he cerrado sesión.
Te darás cuenta de que lo que hace
cuando voy directo a autos,
es que me enruta para iniciar sesión,
y luego con el siguiente para volver a auto.
Así que esta vista en autos,
el /autos se ha protegido con la mezcla de inicio de sesión.
Más tarde haremos inicio de sesión,
su inicio de sesión no se verá así,
pero este es el que tengo en las muestras.
No tienes que hacerlo bonito todavía,
una próxima asignación va a hacer todo bonito.
Así que ahora estamos en autos y estamos conectados.
Su aplicación tiene que tener algunas cosas más aquí,
pero estoy más interesado en
mostrarle realmente la esencia de
las vistas en estos autos.
Vamos a revisar brevemente sobre cómo funciona el inicio de sesión automático.
Entonces, si miro dj4e-samples/settings.py,
necesitas tener esta autenticación enchufada.
Entonces eso básicamente es un montón de código, algunas vistas,
etc., que proviene de Django,
y eso ha estado ahí todo el tiempo
cuando hiciste tu proyecto de inicio.
Por supuesto, entonces en algún lugar aquí,
tenemos que tener los autos, dondequiera que estén los autos.
Sí, la configuración de la aplicación de autos,
tienes que sacar la aplicación de autos.
Si miro dj4e-samples/urls.py,
entonces puedo encontrar autos aquí,
y necesita haber alguna línea que básicamente diga,
«En el nivel superior,
todo debajo de autos se delega
al archivo urls en autos.py.
Pero también entonces están las cuentas».
Así que si recuerdas,
este es un montón de puntos de vista que vienen de Django para nosotros,
está preinstalado para nosotros.
Lo que tenemos que hacer es
proporcionarle una plantilla
con el nombre registration.html.
Así que creo que tengo esto en casa/plantillas/registración/.
Sí, lo hago. Así que tengo dos inicios de sesión.
Tengo uno realmente simple como login.html.
Este es el que recomiendo que empieces.
Más tarde usaremos el inicio de sesión social. Esto es muy simple.
Es una página de inicio de sesión que utiliza la capacidad de formularios Django.
Si se forman errores,
significa que hay un error de validación.
Volvió y volvió a mostrar
esta página y le mostró un error.
Luego hacemos un formulario de publicación simple con una URL
que es una búsqueda inversa a una vista con un nombre de inicio de sesión.
Luego ponemos el token CSRF y luego tomamos el formulario,
y solo estoy haciendo esto con etiquetas de párrafo.
Así que ese es un inicio de sesión simple,
ese no es el que estamos mostrando.
Luego, el siguiente es un valor oculto que tienes que pasar para
que cuando realmente
inicies sesión con éxito, sepa volver a autos.
Cuando todo está hecho, vuelve
aquí después de que se haya completado el inicio de sesión.
Para que el registro/inicio de sesión,
puede poner esto en cualquiera de sus aplicaciones,
pero desea nombrarlo registration/login.html.
Así que si echo un vistazo muy rápido
y entro en casa/plantillas,
estas son todas las plantillas.
Cuando hago un ls, verás que tengo
una casa/plantillas/hogar y una casa/plantillas/registro.
Puede tener más de una carpeta aquí.
Si miro lo que hay en el registro,
ves que tengo este inicio de sesión simple y luego
el inicio de sesión más complejo que nos dará
las capacidades de inicio de sesión de GitHub.
Entonces, lo que eso significa es el uso de inicio de sesión social.
El punto está debajo de estas plantillas,
no tiene que tener solo una subcarpeta,
puede tener más de una subcarpeta.
Así que esa es la configuración necesaria para hacerlo de manera
que cuando le decimos a nuestros puntos de vista añadir el login mixin,
que veremos en sólo un segundo.
Le decimos a nuestras opiniones en el inicio de sesión que usen el mixin de inicio de sesión,
entonces sabe de dónde obtener la plantilla.
Así que eso es solo parte de esto y
tus instrucciones te dicen cómo hacerlo.
Entonces, cualquier aplicación que vaya a
construir o cualquier proyecto que vaya a construir,
debe ponerlos en la configuración py,
urls.py, y luego hacer la plantilla.
Luego tienes que comenzar a usar
login mixin y luego todo
comienza mágicamente a unirse.
Así que echemos un vistazo a la aplicación real de autos.
Vamos a ver un par de cosas diferentes
aquí, autos/urls.
Voy a hacer una pestaña multi-terminal,
para que pueda volver entre archivos muy rápido.
Probablemente tengas un editor de texto mejor que yo.
Así que tengo URL,
voy a echar un vistazo al autos/views.py.
Entonces voy a ver autos/model.py.
Entonces voy a ver autos/forms.py.
Así que vamos a trabajar a través de estos cuatro archivos,
URL, vistas, modelos, formularios.
Probablemente hagamos modelos primero.
Así que esto es bastante sencillo.
Vamos a hacer una clase de objeto Make.
Va a tener un campo de caracteres
con algunos validadores en él.
Jugamos con eso con formas.
Puede poner validadores en modelos.
Hemos visto previamente validadores en forma,
pero hay un validador que básicamente dice,
no vamos a aceptar datos que entren en
esta tabla de base de datos a menos que
haya al menos dos caracteres.
Este _str_, has estado haciendo esto por un tiempo.
Eso es básicamente si tomas
un objeto modelo una marca real y lo imprime,
dice cuál de los campos,
en este caso, solo hay un campo.
Entonces eso solo dice que cuando estamos convirtiendo
un objeto modelo en una cadena,
podemos decidir cómo se ve eso.
Luego tenemos un automóvil y tiene
un apodo con un minLengthValidator, max_length de 200,
y kilometraje, que tiene un campo entero, un comentario,
que es un campo de 300 caracteres,
y luego una clave externa también.
Esto como una relación de uno a muchos o muchos a uno,
no una de muchos a muchos, sólo una clave externa en Hacer.
Luego vamos a on_delete
CASCADE, lo que realmente significa que si elimina un Make,
entonces las entradas automáticas correspondientes
se eliminarán automáticamente.
Así que este es un modelo bastante sencillo,
en realidad muy, muy simple.
Una vez más, siempre estamos definiendo
este _str_ (self) para que sepamos que si
solo lo estás mostrando como en la
interfaz de administración o si simplemente
lo estás imprimiendo o simplemente
convirtiendo el modelo en una cadena,
el campo entre estos campos que
se supone que deben usarse es el apodo,
sólo para mostrar a los usuarios finales.
Así que ese es el archivo de modelos.
Veamos el siguiente archivo de formularios.
Así que el archivo de formulario es interesante,
porque hemos visto formularios que
son solo formularios por sí mismos,
pero este es un tipo especial de
formulario y luego es un ModelForm.
En eso, normalmente en los otros modelos,
teníamos todos estos campos,
y los pusimos y se
parecía mucho a un archivo de modelo donde
tenemos un campo de caracteres, PositiveIntegerField.
Pero lo que básicamente estamos diciendo es, ¿sabes qué?
Vamos a hacer un formulario aquí.
Realmente, todo lo que queremos hacer es tomar
todos los campos
del modelo Make y hacerlos campos de formulario.
Así que una forma y un modelo son dos cosas diferentes.
Un formulario es algo que va
entre la vista y la plantilla,
y como verá,
también cae en los modelos automáticamente,
por lo que esto es como hacer todos los campos.
Vamos a crear un
formulario porque los objetos de formulario no tienen que estar asociados con modelos.
Pero en este caso, vamos a
derivar un objeto de formulario de un modelo.
Entonces, en lugar de extender la forma, estamos extendiendo ModelForm.
Entonces eso es un ModelForm debe tener,
y esto es solo algunos datos que dicen que el modelo del que
vamos a extraer todos nuestros campos es el modelo Make,
y solo tiene una cosa que es un nombre.
Eso es todo. Así que esto es generar automáticamente
un formulario que si
lo cambiamos y agregamos otro campo aquí,
entonces este formulario make tendría automáticamente un campo.
Puedes darle una lista de campos,
_ _ todos _ _ es
como una señal para decir, «Sólo dame todos ellos».
Ahora puede haber algunas
cosas internas como creadas y
actualizadas en o algo que no quieras usar.
Así que eso es un formulario, recuerda cómo funcionan los formularios.
Ya cubrimos eso antes. Echemos un vistazo a nuestras URL.
Mucho de esto se
parece bastante a las cosas que hemos hecho.
Básicamente tenemos una tabla principal,
que es nuestra tabla de autos,
y nuestra tabla de búsqueda, que es nuestra tabla de marcas.
Entonces tenemos tres cosas,
no es la vista principal de la lista,
que es la lista de todos los autos.
Existe la vista principal de lista de Make,
que es la lista de todas las marcas.
Entonces podemos hacer
una nueva que no tenga una clave primaria,
porque parte de las ideas que
crean es hacer algo nuevo,
que va a generar una clave primaria.
Entonces vamos a tener una actualización y una eliminación.
Así que tenemos una lectura, crear, actualizar, eliminar.
Así que no es exactamente cred,
pero ves las cuatro cosas.
Así que tenemos vistas,
y nombramos estas vistas para que podamos hacer
referencia a ellas en nuestras vistas
y en nuestra plantilla
para que podamos hacer enlaces entre ellas.
Así que estos son bastante
sencillos y no tan diferentes.
Así que la diversión comienza a suceder cuando estamos en el views.py.
Así que inicie sesión mixin,
si recuerda del autor de z tutorial,
simplemente agregue esto a una vista y
básicamente dice que no puede acceder
a esta vista a menos que haya iniciado sesión
y si no haya iniciado sesión,
se encontrará en el
archivo login.html y luego rebotará después de que esté hecho.
Así que LoginRequiredMixin es todo lo que tenemos que hacer.
Si vas a la muestra de autor z,
verás como lo hice a mano.
Si no quieres hacerlo a mano,
solo llama a Login Mixin.
Ahora, esta vista principal es una vista de lista,
así que vamos a echar
un vistazo a cómo se verá esto.
Esta es la vista Lista.
Así que vamos a tomar cuantas auditorías tengamos,
vamos a recorrer esa lista,
vamos a recuperar todas las auditorías de la base de datos.
Luego vamos a tener un agregar el enlace automático,
luego una vista que haga el enlace con
un recuento de cuántas marcas hay y agregar una marca.
Así que permítanme también luego ir a las plantillas de
autos, autos de nuevo, y la lista automática.
Así que esta es la plantilla que hace eso.
Así que hay algunas cosas que obtenemos,
tenemos una lista de autos.
Ahora los nombres de estos no son forzados,
pero hay convenciones que resultan en un momento,
vamos a parecer realmente útiles.
Así que vamos a conseguir una lista de autos.
Si volvemos a nuestras vistas,
vemos que decimos,
obtener todos los objetos de la tabla automática,
todos los objetos de la clase automática los recuperan todos,
más allá de ellos en el contexto como auto_list.
Ahora también queremos ser capaces de
mostrar ese pequeño recuento, este es el número dos,
así que vamos a preguntar,
seguir adelante con
los objetos de marca todos pero no me des una lista de ellos,
cuéntalos y dame un número.
Así que hacer recuento está atascado allí y
verás si puede contar es mayor que cero.
Podemos mostrar el anuncio y el botón automático,
y también en algún lugar muestra el número de marcas,
ver todas las marcas, añadir una marca,
y el make count sale aquí.
Así que eso es otra cosa que ponemos.
La lista automática que vamos a pasar y esa
variable de iteración de auto va a
pasar por cada una de las cosas separadas,
y apodo, make, etc.,
eso es directamente del archivo models.py.
Hay cuatro cosas que cada auto tiene,
y estamos imprimiendo todo esto.
También obtienes la clave principal,
por lo que vamos a hacer una URL de actualización,
y esa URL es para autos: auto_update.
Así que si miras en urls.py,
vemos esta actualización automática busca,
esto nos da una ruta a la vista,
pero esa ruta en particular necesita
un parámetro que es una clave principal,
y eso significa que esta etiqueta de plantilla URL,
autos tiene
que tener el auto.id a través de los modelos,
tienes uno, y haces un auto_create,
eso es bastante sencillo.
Pero una de las reglas es, es que tienes que tener al
menos una marca antes de poder hacer un auto,
porque si lo recuerdas,
agregar un auto tiene que tener
esta lista desplegable poblable y
que se está sacando de la tabla make,
y así que esa es básicamente la manera de evitar esto.
Esa es la vista principal.
Aquí vamos, actualízate.
Esa es la vista de autos, y luego si hacemos la vista make,
estamos haciendo lo mismo.
Si vamos a ver la lista de marcas,
estamos haciendo lo mismo básico,
ver todas las marcas,
y ahora tenemos actualización y eliminación.
De esta manera no necesitas contar.
Solo queremos agarrar todos los objetos,
queremos ponerlo en un contexto bajo la lista de marcas,
y luego hacemos lista en el HTML,
y esto es aún más simple.
Sólo está revisando la lista de marcas,
entra a través del contexto.
Si no hay ninguno, no imprimimos esto,
y luego publicamos su nombre,
y luego tenemos una actualización y un botón de eliminación
que va a la actualización y eliminación,
y por supuesto, si miras en urls.py,
esos también la actualización y eliminación
tienen requisitos de clave primaria,
y así tienes una clave principal
que tienes que pasar aquí para
hacer que esa URL sea la URL correcta,
y luego solo algunos enlaces para
volver a las diversas cosas para que
podamos volver a autos,
ver marcas, agregar una nueva marca.
Ahora, cancela todas esas cosas.
Entonces ese es el views.py
para enumerar los autos y las marcas.
Ahora, queremos hacer la vista make create.
Entonces, si echamos un vistazo a la vista make create,
eso es agregar un make.
Eso va a crear este formulario.
Puedo hacer esto más grande aquí.
Puede crear este formulario,
donde vamos a poner en una cosa llamada Chevy.
Así que necesitamos una forma de hacer este formulario.
Vamos a hacer que sea un inicio de sesión requerido,
no vamos a dejar que la gente haga esto.
Vamos a tener algunas variables que son de toda la clase,
como qué plantilla queremos usar,
y success_url es después de que hayamos hecho esto bien.
Ahora, si
lo envías y se queja, no lo hace.
Pero una vez que lo hayas hecho bien,
¿adónde quieres ir después?
Entonces, Chevy, ¿adónde quieres ir después?
Esta es la función del controlador.
Quiero volver a la lista automática,
y por lo tanto, success_url es ir
a autos:todo lo que en urls.py es esta vista principal.
Ese es el nombre de la vista principal,
y así si vamos aquí,
qué plantilla usar y qué success_url.
Si hacemos una solicitud get,
vamos a construir un formulario para
el make que viene de make form,
pero realmente proviene del modelo make,
que es solo un campo de cadena.
Tan simple como eso. Vamos a reutilizar esto.
Solo estamos diciendo, hagamos un formulario
que salga de aquí.
Tenemos que pasar un formulario,
porque los modelos no se pueden usar para crear esta pantalla.
Esa pantalla viene de un formulario.
Está bien. Si echamos un vistazo a la plantilla,
si nos fijamos en la
plantilla make create o make form.
Así que esa es la plantilla que vamos a usar para hacer la forma.
Vamos a necesitar form_as_table.
Así que así es como hicimos las formas.
Coloque el token CSRF,
haga una tabla,
que podría ser como párrafos o como tablas.
Pero lo que sea, necesitas este objeto de formulario.
Por lo tanto, debe pasar el objeto de formulario.
Así que aquí estamos, vamos a hacer un formulario
y luego vamos al objeto formulario en,
y luego vamos a renderizar a self.template
autos.makeform html.
Entonces vamos a devolver eso para conseguir.
Luego, cuando presionamos
el botón de enviar, Agregar una marca,
presionamos el botón de enviar,
que está entrando en el post
porque hicimos una publicación de formulario, entra en.
No hagas eso. Eso es terrible.
Odio cuando Vi hace eso.
Pero aquí vamos, estamos de vuelta.
Sí. Así que el post entra,
request.post tiene todos los pares de valores clave
que son estos pares clave-valor como se define en el formulario.
Así que decimos que hagamos un formulario de maquillaje con
los datos iniciales que vienen de la publicación de solicitud.
Dado que el formulario lo generó,
sabe cuáles son los nombres de estos campos,
y esto es algo que se esconde detrás de cómo funcionan los formularios.
Pero también comprueba si los datos del formulario son válidos y
eso significa que somos todas estas reglas de validador seguidas.
Si no se siguen las reglas del validador,
si el formulario no es válido,
sólo vamos a enviarlo de vuelta.
Así que este código aquí,
este formulario no es un código válido.
Si pongo una sola letra A y presiono «Enviar»,
va a volver y volver a renderizar
el formulario y todas esas cosas de errores,
todo eso es manejado por este código de formulario,
este código de formulario de Django averigua qué está mal.
Justo un poco para poder
volver a eso más rápido. Ahí vamos.
Averigua qué está mal con él,
hace un mensaje de error,
el mensaje de error vino de models.py aquí mismo.
No, justo aquí.
Luego pasó por forms.py porque es
una forma en última instancia que heredamos del
formulario del modelo. ¿Lo tienes?
Así que eso es genial. Entonces esa es la condición de error,
y de lo contrario hacemos form.save.
Ahora lo que aquí es realmente
genial es porque este formulario es
un formulario modelo y
los nombres de campo son los mismos que los
nombres de campo en el modelo,
y por lo que realmente hace un guardado en el modelo en sí.
Entonces, de alguna manera, el formulario contiene los datos del modelo
que vinieron de la solicitud de publicación y luego los guarda.
Eso guarda el formulario.
Lo pone en, y luego simplemente
redireccionamos de nuevo a la URL de solicitud.
Esto es bastante sucinta.
Recogemos los datos de publicación antiguos,
comprobamos si es malo, si es malo,
enviamos el formulario de vuelta a
la misma plantilla que
hicimos y luego lo guardamos si es bueno,
y luego volvemos a la URL de éxito.
Eso es algo hermoso.
Pero al igual que en Django todo el tiempo,
esto es algo mucho más fácil de
hacer a pesar de que esto es súper sucinta.
Si hicieras esto en casi cualquier otro idioma,
serías como 75 líneas de código,
y aquí tenemos como 15 líneas de código.
Pero resulta que en Django
casi siempre hay una forma más sucinta de hacerlo.
Tenemos una vista de creación genérica.
Puede echar un vistazo a la documentación de
esta vista de creación genérica, django.views.generic.edit.
Vamos a buscar en Google estas cosas.
Siempre pongo un punto aquí y esto generalmente
me lleva bien porque
ese es el paquete real y la clase dentro
del paquete. Oh, no.
Lo siento. Pensaste que era un nombre de dominio,
así que la búsqueda no funcionó.
Pero ahora solo diré Django,
algo así que al menos
va a ver con una búsqueda para mí, las
vistas de edición genéricas saltan a CreateView.
Así que puedes leer todas estas cosas,
CreateView genérico en realidad.
¿ Tengo una referencia a esto?
Así que ahí lo tienes. Echa un vistazo a eso.
Ahora, esto al igual que
algunas de las otras vistas que hemos heredado,
tienen una tonelada de funcionalidad en ellas.
Entonces, si quiero hacer un AutoCreate,
esto es todo lo que se necesita.
Ahora, AutoCreate y MakeCreate
para todos los propósitos y propósitos,
hacen exactamente lo mismo.
Entonces, lo que sucede en
AutoCreate porque estamos extendiendo CreateView,
tenemos tres bits de metadatos, le decimos qué modelo queremos usar,
qué campos de ese modelo queremos
y dónde está la URL de éxito.
Entonces esto genera todo este código.
Heredamos todo ese código.
Notarás que no hay nada codificado
aquí excepto el MakeForm.
Ahora, ni siquiera tenemos que hacer un formulario para el Auto
porque este código de aquí construye el formulario.
No solo eso, sino que usa este nombre
Auto para elegir la plantilla.
Entonces, si hago auto_form,
tengo que usar esto.
Yo uso esto, ese es mi bootstrap base.
No te preocupes demasiado por eso.
Entonces sabe el nombre
de la plantilla que va a usar.
Solo tengo que decirle qué plantilla usar aquí,
porque deriva la plantilla,
auto_form.html es la plantilla.
Bastante genial. Bastante impresionante y genial.
Por lo tanto, automáticamente encuentra eso y el success_url.
Así que esto es todo lo que se necesita.
De hecho, en este MakeCreate,
podría haber eliminado todo este código de aquí a aquí,
pero en su lugar simplemente hacer un CreateView extendiendo CreateView.
Así que te estoy mostrando esto porque quiero que
veas lo que realmente está pasando.
Pero así no es como escribes tu código.
Así es como escribes tu código.
Así que ahora, quiero mostrarles
la forma difícil de hacer una actualización.
Entonces, ¿qué es una actualización? Echemos un vistazo al código.
Así que vamos a echar un vistazo a la vista hace.
Actualización es lo que
sucede cuando vamos aquí y
que va a ir a MakeUpdate.
Así que aquí está MakeUpdate, aquí está urls.py. Es éste.
Quiero decir, buscar la actualización de la clave principal,
que luego si miras aquí abajo,
va a ser autos buscar una actualización.
Así que voy a actualizar el Chevy.
Tiene que leer los datos antiguos,
tiene que mostrárselos,
y luego vamos a actualizarlos y luego enviarlos comprobando,
por supuesto, para cualquier error de validación.
Luego redirigiéndonos de vuelta a un success_url.
Así que si miramos las vistas,
vamos a hacerlo de nuevo,
presagiando, hay una manera mucho más fácil de hacer esto.
Así que establecemos estas variables o el success_url,
qué plantilla queremos, y el modelo.
Entonces tenemos una solicitud de obtener.
Porque en el urls.py hay esto int:pk,
se pasaron en este valor pk.
Ahora, este get_object_or_404 es realmente genial.
Este get_object_or_404 (self.model pk=pk).
Ese es este parámetro que estamos pasando
pk es igual y es común que tengan el mismo nombre,
pero este es un parámetro para get_object_or_404.
Este segundo es el parámetro
que fue llamado a nuestro get.
Self.Modelo, por supuesto, es hacer.
get_object_or_404 básicamente comprueba si,
voy a hacer esta actualización,
vamos a hacer, hagamos una actualización.
Lo que está haciendo es tomar este número,
estos tres aquí, autos/lookup/3/update,
y está recuperando los datos antiguos.
Ahora, ¿qué pasa si
involuntariamente tengo un número
que no existe en la base de datos,
como 9,999, y hago una solicitud de obtención a esa?
Obtengo «Página no encontrada 404».
Así que lo que está pasando aquí es de alguna manera que dices: «Oye,
carga este objeto y dámelo a mí y a la variable
, haz, o simplemente explota y envía un error 404».
Entonces esto te está diciendo lo que está pasando,
qué vista te simplemente, «No Make coincide con la consulta dada».
Ahora, generalmente no se supone que escribas a mano estos.
Tres funciona, y por lo tanto no explota.
Entonces get_object_or_404 es una forma de cargar
los datos antiguos y luego
proteger el uso de esos datos, o simplemente volar.
Así que no vayas más lejos en ese punto.
Ahora, entonces vamos a hacer
un formulario y vamos a llenarlo con los datos antiguos.
Entonces, ejemplo, lo que la instancia es hacer.
Así que ese es el objeto.
Hacer un MakeForm. Aquí hay un MakeForm.
Todos los campos del modelo
heredan del modelo Make.
Luego páselo a la plantilla make_form.html,
que acabamos de ver.
Este formulario viene, es todo lo que necesitamos.
Esto es un aspecto muy genérico.
Realmente no le importa demasiado.
Todo está codificado en esta forma,
que se deriva del modelo.
Entonces, por supuesto, escribimos un montón
de cosas y presionamos «Enviar».
Hace exactamente lo mismo que el Create,
y lo hace bien.
Primero tiene que hacer un get o 404 porque
publicamos en la cosa con la clave principal.
Lo cargamos para asegurarnos de que tenemos un objeto que actualizar.
Luego creamos un nuevo formulario make
a partir de esa base de datos y luego lo cambiamos.
Entonces esto es como los datos de inicio,
pero luego los altera a los datos.
Entonces, en este caso particular,
Chevrolet es el valor antiguo en la base de datos.
Si digo Bowtie,
solicitud post laboratorio Bowtie,
esto iniciará un Chevrolet pero en este
objeto forma entonces será Bowtie.
Por supuesto, si no es válido,
vamos a devolver un mensaje de error aquí mismo.
Si es válido, vamos a
guardarlo y así esta nueva pajarita
va a ser guardada allí.
Así que si vemos nuestras marcas,
vemos que ahora es Bowtie,
y vamos a redirigir a URL de éxito.
Ahora, en este punto,
espero que puedas predecir
lo que va a suceder a continuación.
AutoUpdate, amplía la vista de actualización,
la vista de edición genérica.
Dice qué modelo es,
qué campos desea y
dónde ir cuando tenga éxito.
Entonces hace todo lo que hay aquí.
Literalmente, podría ir y decir
exactamente las mismas palabras para hacer eliminar,
que es lo que sucede cuando entras aquí
y eliminas y luego tienes una cancelación,
hay una confirmación de eliminación.
El nombre de esta plantilla no se elige al azar,
tiene que llamarse confirm.delete,
el modelo confirm.delete.
Ahí lo tienes. Tienes que usar el token CSRF.
Te entregan la marca como un objeto en esto.
Así que eso produce esta salida.
No hay forma en este caso.
Solo está la marca que se carga por
objeto o 404 y luego pasa make in y lo renderiza.
Luego, cuando ocurre la publicación, la recupera.
Si está allí, un 404 nuevamente
comprobando si hay datos erróneos y eliminándolos,
y luego saltando a la URL de éxito.
No se necesita mucho adivinar lo que voy a hacer a continuación,
y es decir, si extiendes la vista de eliminación,
obtienes todo ese código de forma gratuita.
Simplemente diga qué campos de modelo
y dónde ir para el éxito.
Así que la clave es que
mientras hacen sus deberes,
estoy seguro de que algunos de ustedes van a copiar y
pegar todas estas cosas. Eso está mal.
MakeCreate, MakeUpdate y
MakeDelete deben ser tan cortos
como AutoCreate, AutoUpdate y AutoDelete.
Porque vas a hacer estas
vistas de edición genéricas mucho y
vamos a hacer CRUD una y otra y otra vez,
y realmente no quieres escribir 15 líneas de código.
Eso es repetición innecesaria, corte y
pegado innecesarios y cambio de código si
puede mantenerlo realmente simple.
Así que básicamente puedo construir un conjunto completo de
formularios CRUD y funcionalidad CRUD con
validación para un modelo con
este código y luego ni siquiera tengo que tener un forms.py,
solo tengo un models.py.
Así que si estás haciendo tus Autos,
pensarías que cometí
un error si estoy cometiendo un forms.py.
Porque si solo uso este views.py de esta manera,
en lugar de hacer que todos se vean como MakeUpdate,
entonces te ahorrarás mucho
tiempo y energía y tenemos que modificar estas cosas.
Es mucho más fácil encontrar
todos los cambios y luego modificarlos.
Entonces eso es un recorrido por el código de muestra para Autos.
Vas a hacer una tarea en esto,
pero no sólo copies todo.
He configurado esto para que el
tiempo que pasas entendiendo lo que está pasando,
particularmente en las vistas.
URL es su orgullo simplemente copiar, los
modelos que acaba de copiar,
las URL que acaba de copiar,
pero las vistas no solo lo copian,
averiguar qué está pasando realmente y encontrar
la forma más fácil y más sucinta de hacer todas estas cosas.
Django está empezando a verse
realmente hermoso en este punto.
Así que espero que hayas encontrado esto útil. Salud.