Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/02/2016, 14:22
elcaiaimar
 
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