Desarrollo de Ecommerce con Django (parte 4)

Dentro de este cuarto y último tutorial se cubrirán los siguientes puntos:

Procesar nuevo pedido.
Mostrar histórico de pedidos.
Filtrar productos por categoría.

1. Procesar un nuevo pedido

  • Dentro del paquete “models” de la aplicación store, crea un archivo Python: “pedido.py” y agrega la siguiente definición para el modelo:
from django.db import models
from django.contrib.auth.models import User
from .producto import Producto class Pedido(models.Model): usuario = models.ForeignKey(User, on_delete=models.CASCADE) producto = models.ForeignKey(Producto, on_delete=models.CASCADE) cantidad = models.PositiveIntegerField(default=1) total = models.DecimalField(max_digits=12, decimal_places=2) fecha_registro = models.DateTimeField(auto_now_add=True) fecha_ult_act = models.DateTimeField(auto_now=True) def __str__(self) -> str: return f'{self.id}' class Meta: db_table = 'st_pedidos' verbose_name = 'Pedido' verbose_name_plural = 'Pedidos'`
Enter fullscreen mode
Exit fullscreen mode

El modelo Pedido se utilizará para registrar los nuevos pedidos.

  • A continuación, debemos crear la “URL” a través de la cual se procesará el registro de cada pedido. Agrega el siguiente código a tu archivo urls.py de la aplicación “store”:
urlpatterns = [ # Otras rutas path('pedidos/', views.crear_pedido, name='crear_pedido')
]
Enter fullscreen mode
Exit fullscreen mode
  • Una vez que la ruta esté creada vamos a asociarla con su función de vista correspondiente, para ello crearemos la función crear_pedido en el archivo views.py de la aplicación “store”:
def crear_pedido(request): try: datos_pedido = json.loads(request.body) producto_id = int(datos_pedido.get('producto_id')) cantidad = int(datos_pedido.get('cantidad')) producto = Producto.objects.get(pk=producto_id) nuevo_pedido = Pedido( usuario=request.user, producto=producto, cantidad=cantidad, total=cantidad*producto.precio) nuevo_pedido.save() return JsonResponse({'success': True, 'message': f'Se registró el pedido exitosamente. Pedido # {nuevo_pedido.id}'}, status=200) except Exception as ex: return JsonResponse({'success': False, 'message': str(ex)}, status=500) 
Enter fullscreen mode
Exit fullscreen mode
  • Posteriormente realizaremos la petición http vía ajax que se encargará de consumir la ruta de creación de pedido al momento que el usuario desee ingresar un nuevo pedido. Para ello, vamos a crear un nuevo archivo estático de javascript dentro de la carpeta static/js, el archivo podría llamarse pedido.js.

Dentro del archivo, procedemos a registrar la siguiente función:


function crearPedido = (producto_id, cantidad, csrf_token) => { const jsonData= { producto_id: producto_id, cantidad: cantidad } axios.post('/pedidos/', jsonData, { headers: { 'X-CSRFToken': csrfToken } }) .then(response => { alert(response.data.message); }) .catch(error => { if (error.response) { alert(error.response.data.message); }else { alert(error.message); } }); 
Enter fullscreen mode
Exit fullscreen mode

Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Leave a Comment

Your email address will not be published. Required fields are marked *

Discover more from Coursity

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top
Free & easy ad network.