python - recorrer - Datos de limpieza que son de tipo URLField
recorrer data frame pandas (1)
Hice un experimento rápido y descubrí que puedes usar un método clean_
para eliminar los espacios clean_
/ finales. Algo como esto:
# models.py
class UrlModel(models.Model):
link = models.URLField(verify_exists = False, max_length = 225)
def __unicode__(self):
return self.link
# forms.py
class UrlForm(ModelForm):
class Meta:
model = UrlModel
def clean_link(self):
link = self.cleaned_data[''link'']
return link.strip()
# shell
In [1]: from test_app.forms import UrlForm
In [2]: f = UrlForm(data = dict(link = '' http://google.com ''))
In [3]: f.is_valid()
Out[3]: True
In [4]: f.save()
Out[4]: <UrlModel: http://google.com>
Actualizar
Me aparece un error que dice "Ingrese un enlace válido como www.ted.com". Edité mi pregunta e incluí el modelo y el formulario en cuestión.
Verifiqué que tu clase de formulario da el error.
Después de hacer un pequeño cambio, pude hacerlo funcionar. Todo lo que hice fue eliminar el title
personalizado y los campos de link
. Estamos trabajando con un formulario modelo aquí y el modelo subyacente ya tiene estos campos. Creo que la redefinición llevó a que se generara un error de validación antes de invocar el método de limpieza personalizado.
class StoryForm(forms.ModelForm):
class Meta:
model = Story
fields = (''title'', ''link'')
def clean_link(self):
link = self.cleaned_data[''link'']
return link.strip()
Aquí hay algunos ejemplos de salida del shell:
In [1]: from test_app.forms import StoryForm
In [2]: data = dict(title="Google story", link = " http://google.com ")
In [3]: f = StoryForm(data)
In [4]: f.is_valid()
Out[4]: True
In [5]: f.save()
Out[5]: <Story: Google story http://google.com>
Tengo un URLField simple en mi modelo
link = models.URLField(verify_exists = False, max_length = 225)
Me gustaría quitar los espacios iniciales y finales del campo. No creo que pueda hacer esto en "clean_fieldname" o en el método "clean".
¿Necesito subclasificar el "URLField" y eliminar los espacios en el método to_python? ¿Hay una mejor manera de hacer esto sin ninguna subclasificación?
Editado
Esta es mi forma
class StoryForm(forms.ModelForm):
title = forms.CharField(max_length=225, error_messages={''required'' : ''Enter a title for the story''})
link = forms.URLField(max_length=225, error_messages={''required'' : ''Enter a link to the story'', ''invalid'' : ''Enter a valid link like www.ted.com''})
class Meta:
model = models.Story
fields = (''title'', ''link'')
def clean_link(self):
link = self.cleaned_data[''link'']
return link.strip()
y mi modelo
class Story(models.Model):
title = models.CharField(max_length = 225)
link = models.URLField(verify_exists = False, max_length = 225)