Saltar a contenido

Crear y Eliminar Objetos ORM

1. Introducción

En este tema vamos a trabajar con los objetos ORM de Django, específicamente con el modelo Comentario creado previamente. Aprenderemos a crear y eliminar objetos en la base de datos utilizando el ORM de Django.

Es importante tener en cuenta que aún no estamos utilizando formularios, solo trabajaremos con el código del backend para manipular estos objetos.

Objetivos del tema

  • Crear nuevos objetos del modelo Comentario.
  • Eliminar objetos del modelo Comentario.

2. Estructura del Objeto Comentario

Recordemos que el modelo Comentario fue definido anteriormente de la siguiente forma:

# comentarios/models.py
from django.db import models

class Comentario(models.Model):
    name = models.CharField(max_length=255)
    score = models.IntegerField(default=3)
    comment = models.TextField(max_length=1000, null=True)
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'Comentario de {self.name} con puntuación {self.score}'

Este modelo define los siguientes campos:

  • name: Nombre del autor del comentario.
  • score: Puntuación del comentario.
  • comment: El contenido del comentario.
  • date: Fecha de creación del comentario.

3. Crear un Comentario

3.1 Crear la ruta create/

Para permitir la creación de comentarios, primero crearemos una nueva ruta create/ en urls.py que apuntará a la vista encargada de crear el comentario.

# comentarios/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('create/', views.create_comentario, name='create_comentario'),
]

3.2 Definir la vista create_comentario

En views.py, crearemos la vista que manejará la creación de un comentario. Mostraremos cómo crear el comentario de dos maneras posibles:

  • Opción A: Crear el objeto y luego guardarlo con el método save().
  • Opción B: Usar el método create() para crear y guardar el objeto directamente.
# comentarios/views.py
from django.http import HttpResponse
from comentarios.models import Comentario
from django.http import HttpResponse

# Opción A: Crear el objeto y luego guardarlo
def create_comentario(request):
    comentario = Comentario(name='Juan', score=5, comment='Gran artículo!')
    comentario.save()  # Guardamos el objeto en la base de datos
    return HttpResponse('Comentario creado con éxito (usando save()).')

# Opción B: Usar create() para crear y guardar el objeto
def create_comentario_create(request):
    Comentario.objects.create(name='Pedro', score=4, comment='Muy interesante.')
    return HttpResponse('Comentario creado con éxito (usando create()).')

3.3 Llamar a la ruta para crear comentarios

Para probar las vistas creadas, navegamos a http://127.0.0.1:8000/comentarios/create/ para crear un comentario. Puedes realizar esta llamada en tu navegador o en una herramienta como Postman si prefieres trabajar con solicitudes HTTP.

3.4 Comprobar en la base de datos

Utiliza la extensión SQLite en VSCode o la terminal para abrir la base de datos y verificar que los comentarios se han creado correctamente en la tabla comentarios.


4. Eliminar un Comentario

4.1 Crear la ruta delete/

Para eliminar un comentario, crearemos una ruta delete/ que tomará un id como parámetro y eliminará el comentario correspondiente.

# comentarios/urls.py
urlpatterns += [
    path('delete/', views.delete_comentario, name='delete_comentario'),
]

4.2 Definir la vista delete_comentario

En views.py, crearemos la vista que eliminará un comentario. Mostraremos dos maneras de hacerlo:

  • Opción A: Usar el método delete() directamente sobre el objeto.
  • Opción B: Usar filter() y luego llamar a delete() sobre el conjunto de resultados.
# comentarios/views.py
from django.http import HttpResponse
from comentarios.models import Comentario
from django.http import HttpResponse

# Opción A: Usar delete() sobre el objeto
def delete_comentario(request, id):
    comentario = Comentario.objects.get(id=id)
    comentario.delete()  # Elimina el comentario de la base de datos
    return HttpResponse(f'Comentario con id {id} eliminado con éxito (usando delete()).')

# Opción B: Usar filter().delete()
def delete_comentario_filter(request, id):
    Comentario.objects.filter(id=id).delete()  # Elimina el comentario con el id dado
    return HttpResponse(f'Comentario con id {id} eliminado con éxito (usando filter().delete()).')

4.3 Llamar a la ruta para eliminar comentarios

Puedes probar estas vistas navegando a http://127.0.0.1:8000/comentarios/delete/ para eliminar un comentario (reemplaza <id> con el id del comentario que deseas eliminar).

Vista navegador

Vista navegador

4.4 Comprobar en la base de datos

Nuevamente, utiliza la extensión SQLite en VSCode o la terminal para abrir la base de datos y verificar que el comentario ha sido eliminado correctamente de la tabla comentarios.


5. Resumen

En este tema hemos aprendido a crear y eliminar objetos utilizando el ORM de Django. Vimos cómo hacerlo de dos maneras diferentes:

  • Crear objetos utilizando el método save() y create().
  • Eliminar objetos utilizando delete() y filter().delete(). Además, verificamos que los cambios se reflejan correctamente en la base de datos utilizando VSCode o la terminal.

6. Ejercicio Propuesto

6.1 Crear un modelo Post

Crea un nuevo modelo Post con los campos:

  • title: CharField, máximo 200 caracteres.
  • content: TextField, no nulo.

Crea rutas para crear y eliminar objetos Post.

6.2 Crear un modelo Author

Crea un modelo Author con los campos:

  • name: CharField, máximo 100 caracteres.
  • email: EmailField.

Crea una ruta para eliminar un objeto Author por su id.

6.3 Comprobar en la base de datos

Verifica que los objetos se crean y eliminan correctamente en la base de datos utilizando consultas SQL en VSCode o la terminal.


Puedes copiar y pegar este contenido en tu proyecto para probarlo. Si necesitas más detalles o ajustes, ¡avísame!