Solicitud de código de stock en Django & SQL

Tengo un sobrecelfile de materiales y tiene diferentes tipos de material. Cada categoría tiene un prefijo específico como AB001 o BC001

Estoy planeando escribir un servicio web para la solicitud de estos códigos de stock de materiales.

Pero necesito importar mi vieja base de datos y he atrapado cómo puedo implementar esto?

He creado un modelo en DJANGO como Materiales, pero no pude resolver que si importaba mi antiguo archivo de Excel, el software como puede entender los números será correcto. Debe ser consecutivo. Como... AB001, AB002, AC001,AC002,AZ001)

¡Gracias por adelantado!

Pregunta hecha hace 3 años, 4 meses, 28 días - Por nasean


3 Respuestas:

  • Django ORM tiene un order_by() método. ¿Necesitas algo más que esto?

    Los modelos de clase meta pueden permitir el orden predeterminado

    modelos. py

    class Material(models.Model):
        material_stock_code = models.CharField(max_length=255)
    
        class Meta:
            ordering = ['material_stock_code']
    

    El order_by() método se puede utilizar en cualquier consulta vistas. py

    Material.objects.all().order_by('material_stock_code')
    

    También recomendaría mirar django-rest-framework para hacer la API

    Respondida el Dec 18, 2020 a las 10:31 - por pixelpioneer

    Votos positivos: 0 | Votos negativos: 0

  • Para importar tu antiguo archivo de Excel a una base de datos en Django y mantener la lógica de los códigos de stock consecutivos con prefijos específicos, como en el ejemplo que diste (AB001, AB002, AC001, AC002, AZ001), puedes seguir los siguientes pasos:

    • Preparar tu archivo de Excel: Asegúrate de que tu archivo de Excel tenga las columnas necesarias, como el prefijo y el número de serie. Puedes añadir una columna adicional que combine el prefijo y el número de serie para formar el código de stock.
    • Crear un script de importación de datos en Django: Puedes crear un script de Python que lea tu archivo de Excel y cree instancias de tu modelo de Materiales en Django. Puedes utilizar la biblioteca pandas para leer el archivo de Excel y manejar los datos de una manera más sencilla.
    • Generar los códigos de stock consecutivos: En tu script de importación, antes de guardar cada instancia de Material, puedes generar el código de stock consecutivo basado en el prefijo y el último número utilizado para ese prefijo. Puedes hacer esto consultando la base de datos para obtener el último código utilizado y luego incremetar el número en uno.

    Te dejo un ejemplo aproximado de cómo podrías implementar esto en tu script de importación:

    python
    import pandas as pd
    from myapp.models import Materiales
    
    data = pd.read_excel('ruta/a/tu/archivo.xlsx')
    
    for index, row in data.iterrows():
        prefijo = row['prefijo']
        last_code = Materiales.objects.filter(prefijo=prefijo).order_by('-codigo_stock').first()
    
        if last_code:
            last_number = int(last_code.codigo_stock[-3:])  

    Obtener el último número del código de stock

    new_number = last_number + 1 new_codigo_stock = f"{prefijo}{new_number:03d}" else: new_codigo_stock = f"{prefijo}001" material = Materiales(prefijo=prefijo, codigo_stock=new_codigo_stock, otra_columna=row['otra_columna'], ...) material.save()

    Recuerda adaptar este script según la estructura de tu modelo de Materiales y los datos de tu archivo de Excel. También es importante verificar que los datos se importen correctamente y que los códigos de stock se generen de forma consecutiva según tus requerimientos.

    Es recomendable realizar pruebas con un conjunto de datos de ejemplo antes de importar toda tu base de datos. ¡Buena suerte!

    Respondida el Dec 19, 2020 a las 10:32 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Importación del archivo de Excel

    • Crea un script de Python para leer y procesar el archivo de Excel.
    • Utiliza una biblioteca como `openpyxl` para leer los datos del archivo.
    • Extrae la columna o celdas que contienen los códigos de stock de material.

    Implementación del modelo Django

    • En tu modelo de Django para Materiales, incluye un campo `codigo_stock` para almacenar el código de stock.
    • Define una función o método personalizado para generar nuevos códigos de stock.

    Generación de códigos de stock consecutivos

    Para generar códigos de stock consecutivos, puedes utilizar una combinación de los siguientes enfoques:

    QuerySet para el último código de stock: Consulta la base de datos para obtener el último código de stock creado para cada categoría (por ejemplo, AB, BC). Contador en memoria: Mantén un contador en memoria para cada categoría y aumenta el contador cada vez que se crea un nuevo código de stock. Bloqueo de transacciones: Utiliza un modelo de bloqueo de transacciones para garantizar que solo un proceso pueda generar un código de stock para una categoría en un momento dado.

    Flujo de trabajo de generación de códigos de stock

    • Cuando se crea un nuevo material, llama a la función o método de generación de códigos de stock.
    • La función determina la categoría del material (por ejemplo, `AB`) y obtiene el último código de stock creado para esa categoría.
    • Si no hay ningún código de stock existente, se utiliza un valor predeterminado (por ejemplo, `AB001`).
    • Si hay un código de stock existente, se incrementa el contador para esa categoría y se utiliza el nuevo valor (por ejemplo, `AB002`).
    • El nuevo código de stock se almacena en el campo `codigo_stock` del nuevo material.

    Ejemplo de código Django

    python
    from django.db import models
    from django.db.models import F
    
    class Materiales(models.Model):
        codigo_stock = models.CharField(max_length=10)
    
    def generar_codigo_stock(categoria):
        ultimo_codigo = Materiales.objects.filter(categoria=categoria).order_by('codigo_stock').last()
        if ultimo_codigo is None:
            return f'{categoria}001'
        else:
            return f'{categoria}{str(int(ultimo_codigo.codigo_stock[2:]) + 1).zfill(3)}'
    

    Ejemplo de uso*

    python
    nuevo_material = Materiales(categoria='AB')
    nuevo_material.codigo_stock = generar_codigo_stock(nuevo_material.categoria)
    nuevo_material.save()
    

    Respondida el Dec 19, 2020 a las 10:42 - por Gemini

    Votos positivos: 0 | Votos negativos: 0