Foros del Web » Programando para Internet » Python »

guardar contenido de ficheros csv con campos nulos

Estas en el tema de guardar contenido de ficheros csv con campos nulos en el foro de Python en Foros del Web. Hola, He habilitado en mi formulario una opción para introducir registros en la base de datos de forma masiva a través de un fichero CSV. ...
  #1 (permalink)  
Antiguo 02/02/2016, 14:22
 
Fecha de Ingreso: septiembre-2014
Mensajes: 40
Antigüedad: 10 años, 1 mes
Puntos: 0
Pregunta guardar contenido de ficheros csv con campos nulos

Hola,

He habilitado en mi formulario una opción para introducir registros en la base de datos de forma masiva a través de un fichero CSV. Lo he probado y funciona siempre y cuando todos los campos del archivo estén rellenados. Sin embargo, si intento introducir un fichero con campos en blanco me salta error.

Tengo otros formularios de introducción de registros uno a uno y solucionaba este tipo de error con nombreformulario.cleaned_data[nombreitem] pero esta vez es diferente porque no existe un formulario de por medio.

¿Alguien conoce alguna solución?

Aquí les dejo mi código:

Models.py:

Código:
class Medios(models.Model):
    titulo = models.CharField(max_length=140)
    url = models.URLField(max_length=200)
    fecha_creacion = models.DateField(default=None, blank=True, null=True)
    fecha_cierre = models.DateField(default=None, blank=True, null=True)
    pais = models.CharField(max_length=100, default=None, blank=True, null=True)
    tematicas = models.CharField(max_length=255, default=None, blank=True, null=True)
    email = models.EmailField(max_length=50, default=None, blank=True, null=True)
    url_contacto = models.URLField(max_length=200, default=None, blank=True, null=True)
    cobert_geo = models.CharField(max_length=140, default=None, blank=True, null=True)
    audiencia_med = models.DecimalField(max_digits=8, decimal_places=2, default=None, blank=True, null=True)
    cuenta_ingresos = models.DecimalField(max_digits=8, decimal_places=2, default=None, blank=True, null=True)
    num_trabajadores = models.IntegerField(default=None, blank=True, null=True)
    asociaciones = models.CharField(max_length=140, default=None, blank=True, null=True)
    url_twitter = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_facebook = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_googleplus = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_instagram = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_linkedin = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_youtube = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_flickr = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_vimeo = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_tumbrl = models.URLField(max_length=200, default=None, blank=True, null=True)
    url_pinterest = models.URLField(max_length=200, default=None, blank=True, null=True)
Views.py:

Código:
def medios_files(request, f):
    reader = csv.DictReader(f, delimiter=',')
    for row in reader:
        
        titulo=row['titulo']
        url=row['url']
        fecha_creacion=row['fecha_creacion']
        fecha_cierre=row['fecha_cierre']
        pais=row['pais']
        tematicas=row['tematicas']
        email=row['email']
        url_contacto=row['url_contacto']
        cobert_geo=row['cobert_geo']
        audiencia_med=row['audiencia_med']
        cuenta_ingresos=row['cuenta_ingresos']
        num_trabajadores=row['num_trabajadores']
        asociaciones=row['asociaciones']
        url_twitter=row['url_twitter']
        url_facebook=row['url_facebook']
        url_googleplus=row['url_googleplus']
        url_instagram=row['url_instagram']
        url_linkedin=row['url_linkedin']
        url_youtube=row['url_youtube']
        url_flickr=row['url_flickr']
        url_vimeo=row['url_vimeo']
        url_tumbrl=row['url_tumbrl']
        url_pinterest=row['url_pinterest']

        my_file = Medios(titulo=titulo, url=url, fecha_creacion=fecha_creacion, fecha_cierre=fecha_cierre,
                pais=pais, tematicas=tematicas, email=email, url_contacto=url_contacto, cobert_geo=cobert_geo,
                audiencia_med=audiencia_med, cuenta_ingresos=cuenta_ingresos, num_trabajadores=num_trabajadores,
                asociaciones=asociaciones, url_twitter=url_twitter, url_facebook=url_facebook, url_googleplus=url_googleplus,
                url_instagram=url_instagram, url_linkedin=url_linkedin, url_youtube=url_youtube, url_flickr=url_flickr,
                url_vimeo=url_vimeo, url_tumbrl=url_tumbrl, url_pinterest=url_pinterest)

        my_file.save()

Muchas gracias de antemano!

Un saludo
  #2 (permalink)  
Antiguo 06/02/2016, 15:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: guardar contenido de ficheros csv con campos nulos

Tal vez te gustaría probar.
https://django-csv-importer.readthedocs.org/en/latest/

Etiquetas: csv, django
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 12:09.