Estoy tratando de probar un FormField AudioFileFormField, que comprueba si un archivo es un archivo de audio antes de almacenarlo. Para eso, he sobrescrito el método to_python. Al intentar probar este FormField, encontré algunas dificultades.¿Cuál es la forma correcta de simular archivos para probar un formulario?
Ésta es mi TestCase hasta ahora:
from django import forms
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
class TestAudioFileFormField(TestCase):
""" test the formfield to use for AudioFile Uploads """
class TestForm(forms.Form):
audiofilefield = AudioFileFormField()
def setUp(self):
self.AUDIOFILE_TEST_ROOT = os.path.dirname(__file__) + '/data/'
self.files = audiofile_files
def test_to_python(self):
""" assign some files to a form and validate the form """
f = file(self.AUDIOFILE_TEST_ROOT + self.files[0])
file_data = {'audiofilefield':SimpleUploadedFile(self.files[0],f.read())}
data = {}
form = self.TestForm(data,f)
form.is_valid()
El form.is_valid línea() plantea una AttributeError: Objeto de 'archivo' no tiene atributo 'conseguir'
cuando inserto un derecho de seguimiento de depuración antes form.is_valid(), esto es lo que me sale en esa sesión interactiva:
ipdb> form.is_valid()
AttributeError: 'file' object has no attribute 'get'
ipdb> suf = file_data['audiofilefield']
ipdb> suf
<SimpleUploadedFile: invalid_format.mp3 (text/plain)>
ipdb> dir(suf)
[lots of info here]
ipdb> form.is_valid()
True
¿Qué es exactamente lo que cambio en la sesión interactiva, por lo que la validación de formularios está funcionando? ¿Cuál sería la forma correcta de pasar el archivo a SimpleUploadedFile para evitar AttributeError?
¿No cree que esto contamina el directorio 'upload /'? –