Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Campo Chardfield aunmenta .0 sin ser campo decimal

Estas en el tema de Campo Chardfield aunmenta .0 sin ser campo decimal en el foro de Python en Foros del Web. Hola tengo un excel e consigo que ese archivo de excel se guarda en mi B.D. Archivo Excel : Código: CodSucursal Surcursal CodDivision 20023 Primavera ...
  #1 (permalink)  
Antiguo 14/08/2014, 10:10
 
Fecha de Ingreso: julio-2011
Ubicación: Peru
Mensajes: 92
Antigüedad: 12 años, 9 meses
Puntos: 1
Campo Chardfield aunmenta .0 sin ser campo decimal

Hola tengo un excel e consigo que ese archivo de excel se guarda en mi B.D.
Archivo Excel :

Código:
CodSucursal        Surcursal       CodDivision
20023              Primavera         G06
Pero cuando lo guarda en mi B.D la columna CodSucursal le aumenta un .0

Base de Datos:

Código:
CodSucursal              Surcursal     CodDivision
20023.0                   Primavera         G06

esta es mi clase en mi model

Código:
class Product(models.Model):

    CodSucursal = models.CharField(max_length=60)
    Sucursal = models.CharField(max_length=60)
    CodDivision = models.CharField(max_length=200)

Alguien me puede ayudar porque aumenta .0 , cuando no yo quiero que aumente ese .0

Esperando su pŕonta colaboracion
  #2 (permalink)  
Antiguo 14/08/2014, 11:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Campo Chardfield aunmenta .0 sin ser campo decimal

Bueno si no vemos como lo estas guardando tambien es dificil que te podamos decir en que estas fallando.

Pero basicamente se reduce al formato, con el que lo estes extrayendo y finalmente guardando.
  #3 (permalink)  
Antiguo 14/08/2014, 12:24
 
Fecha de Ingreso: julio-2011
Ubicación: Peru
Mensajes: 92
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Campo Chardfield aunmenta .0 sin ser campo decimal

este es el codigo de como lo guardo:

Código Python:
Ver original
  1. class DataExcelProcessView(TemplateView):
  2.     template_name = 'app/dataexcel_process.html'
  3.  
  4.     def get(self, request, *args, **kwargs):
  5.         return super(DataExcelProcessView, self).get(request, args, kwargs)
  6.  
  7.     def get_context_data(self, **kwargs):
  8.         ctx = super(DataExcelProcessView, self).get_context_data(**kwargs)
  9.         ctx['process'] = self.process_file()
  10.         return ctx
  11.  
  12.     def process_file(self):
  13.         object = get_object_or_404(DataExcel, pk=self.kwargs['pk'])
  14.         book = xlrd.open_workbook(object.file.path)
  15.         hoja1 = book.sheet_by_index(0)
  16.         fields = ('CodSucursal', 'Sucursal', 'CodDivision')
  17.  
  18.         products = [Product(Id_DataExcel=DataExcel.objects.get(pk=object.id),**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})  # recorrido para guardar la data
  19.                     for rowid in range(1, hoja1.nrows)]
  20.  
  21.         try:
  22.             Product.objects.bulk_create(products)
  23.  
  24.         except IntegrityError as e:
  25.             return False
  #4 (permalink)  
Antiguo 14/08/2014, 12:52
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Campo Chardfield aunmenta .0 sin ser campo decimal

Antes de
Código Python:
Ver original
  1. try:
  2.     Product.objects.bulk_create(products)
  3. except IntegrityError as e:
  4.     return False

Tienes que convertir eso a float, luego a int y luego a cadena.
Código Python:
Ver original
  1. for product in products:
  2.     product.CodSucursal = str(int(float(product.CodSucursal)))

Si CodSucursal es un entero, debiste de usar integer field para eso. Y si es una llave foranea a un modelo sucursal, entonces debiste de usar una llave foranea.
  #5 (permalink)  
Antiguo 14/08/2014, 16:41
 
Fecha de Ingreso: julio-2011
Ubicación: Peru
Mensajes: 92
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Campo Chardfield aunmenta .0 sin ser campo decimal

me pasaron otro archivo mas completo esta es mi estructura

Models.py

Código Python:
Ver original
  1. class Product(models.Model):
  2.  
  3.     CodSucursal = models.CharField(max_length=60)
  4.     Sucursal = models.CharField(max_length=60)
  5.     CodDivision = models.CharField(max_length=200)
  6.     Division = models.CharField(max_length=300)
  7.     CodArea = models.CharField(max_length=60)
  8.     Area = models.CharField(max_length=13)
  9.     CodDpto = models.CharField(max_length=60)
  10.     Dpto = models.CharField(max_length=35)
  11.     CodLinea = models.CharField(max_length=200)
  12.     Linea = models.CharField(max_length=35)
  13.     CodSubLinea = models.CharField(max_length=200)
  14.     SubLinea = models.CharField(max_length=200)
  15.     CodModelo = models.CharField(max_length=60)
  16.     Modelo = models.CharField(max_length=50)
  17.     CodVariacion = models.CharField(max_length=60)
  18.     Variacion = models.CharField(max_length=50)
  19.     CodMarca = models.CharField(max_length=200)
  20.     Marca = models.CharField(max_length=60)
  21.     CodProveedor = models.CharField(max_length=200)
  22.     Proveedor = models.CharField(max_length=60)
  23.     Temporada = models.CharField(max_length=60)
  24.     Procedencia = models.CharField(max_length=60)
  25.     TipoNeg = models.CharField(max_length=15)
  26.     Color = models.CharField(max_length=200)
  27.     Talla = models.CharField(max_length=200)
  28.     SemAntig = models.CharField(max_length=200)
  29.     ConVenta = models.CharField(max_length=200)
  30.     ConStockOH = models.CharField(max_length=200)
  31.     EsRebate = models.CharField(max_length=200)
  32.     ConCobertura = models.CharField(max_length=200)
  33.     VtaUnd = models.CharField(max_length=200)
  34.     VtaSMF = models.FloatField()
  35.     Contr = models.FloatField()
  36.     Costo = models.FloatField()
  37.     Stock_OH = models.CharField(max_length=200)
  38.     Costo_OH = models.FloatField()
  39.     Cbt = models.CharField(max_length=200)

Views.py

Código Python:
Ver original
  1. class DataExcelProcessView(TemplateView):
  2.     template_name = 'app/dataexcel_process.html'
  3.  
  4.     def get(self, request, *args, **kwargs):
  5.         return super(DataExcelProcessView, self).get(request, args, kwargs)
  6.  
  7.     def get_context_data(self, **kwargs):
  8.         ctx = super(DataExcelProcessView, self).get_context_data(**kwargs)
  9.         ctx['process'] = self.process_file()
  10.         return ctx
  11.  
  12.     def process_file(self):
  13.         object = get_object_or_404(DataExcel, pk=self.kwargs['pk'])
  14.         book = xlrd.open_workbook(object.file.path)
  15.         hoja1 = book.sheet_by_index(0)
  16.         fields = ('CodSucursal', 'Sucursal', 'CodDivision', 'Division', 'CodArea', 'Area', 'CodDpto', 'Dpto', 'CodLinea',
  17.                     'Linea', 'CodSubLinea', 'SubLinea', 'CodModelo', 'Modelo', 'CodVariacion', 'Variacion', 'CodMarca',
  18.                     'Marca', 'CodProveedor', 'Proveedor', 'Temporada', 'Procedencia', 'TipoNeg', 'Color', 'Talla',
  19.                     'SemAntig', 'ConVenta', 'ConStockOH', 'EsRebate', 'ConCobertura', 'VtaUnd', 'VtaSMF', 'Contr',
  20.                     'Costo', 'Stock_OH', 'Costo_OH', 'Cbt')
  21.  
  22.         products = [Product(Id_DataExcel=DataExcel.objects.get(pk=object.id),**{fields[i]: cell for i, cell in enumerate(hoja1.row_values(rowid))})  # recorrido para guardar la data
  23.                     for rowid in range(1, hoja1.nrows)]
  24.  
  25.    
  26.         for product in products:
  27.             product.CodSucursal = str(int(product.CodSucursal))
  28.             product.CodLinea = str(int(product.CodLinea))
  29.             product.CodModelo = str(int(product.CodModelo))
  30.             product.CodVariacion = str(int(product.CodVariacion))
  31.             product.CodMarca = str(int(product.CodMarca))
  32.             product.CodProveedor = str(int(product.CodProveedor))
  33.  
  34.         try:
  35.             Product.objects.bulk_create(products)
  36.  
  37.         except IntegrityError as e:
  38.             return False

pero tengo un problema con el campo "Color" ese campo tiene 2 tipos de datos y lo guarda de esta manera

archivo excel
Código:
CodSucursal  	        Sucursal	CodDivision  ......  .....   ....    ..... ....... Color
20023	                  Primavera	G06          ......  ....    ....    ..... ......  ROS1
20023	                  Primavera	G06          ......  ....    ....    ..... ......  BLA
20023	                  Primavera	G06           ......  ....    ....    ..... ......  36951 
guarda la data en al B.D. de esta forma
Código:
CodSucursal  	        Sucursal	CodDivision  ......  .....   ....    ..... ....... Color
20023	                  Primavera	G06          ......  ....    ....    ..... ......  ROS1
20023	                  Primavera	G06          ......  ....    ....    ..... ......  BLA
20023	                  Primavera	G06           ......  ....    ....    ..... ......  36951.0 
como ven el campo "Color" tiene 2 tipos de datos como puedo solucionar eso cuando sea numerico no le ponga .0 decimal y si es cadena que lo deje igual

Espero su pronta ayuda

Etiquetas: campo, decimal, gui
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:30.