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:
Views.py: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)
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