timefield - textfield django example
Django: ¿cómo se convierte InMemoryUploadedFile en FieldFile de ImageField? (3)
¿Intentas hacerlo en ModelForm?
Así es como lo hice para el campo de archivo
class UploadSongForm(forms.ModelForm):
class Meta:
model = Mp3File
def save(self):
content_type = self.cleaned_data[''file''].content_type
filename = gen_md5() + ".mp3"
self.cleaned_data[''file''] = SimpleUploadedFile(filename, self.cleaned_data[''file''].read(), content_type)
return super(UploadSongForm, self).save()
Puede tomarlo como ejemplo y buscar en la fuente qué necesita la clase InMemoryUploadedFile en los parámetros de inicialización.
He intentado con la help(django.db.models.ImageField)
y dir(django.db.models.ImageField)
, buscando cómo se puede crear un objeto ImageField
partir de una imagen que se carga.
request.FILES
tiene las imágenes como InMemoryUploadedFile
, pero estoy intentando guardar un modelo que contenga un ImageField
, entonces, ¿cómo convierto InMemoryUploadedFile
en el ImageField
?
¿Cómo vas a encontrar este tipo de cosas? Sospecho que las dos clases tienen una relación de herencia, pero tendría que hacer un montón de dir()
-ing para averiguar si debía mirar.
Puede implementar un formulario con un campo de carga de archivos utilizando instancias de formulario, aquí está la vista:
def form_view(request):
if request.method == ''POST'':
form = FooForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return render_to_response(''result.html'')
return render_to_response(''form.html'', {
''form'': form;
''error_messages'': form.errors;
}
form = FooForm()
return render_to_response(''form.html'', {
''form'': form;
}
form.save () guarda el archivo cargado junto con todos los demás campos a medida que incluyes request.FILES argumento en su constructor. En sus modelos, debe definir la subclase FooForm de la clase ModelForm de la siguiente manera:
class FooForm(ModleForm):
Meta:
model = Foo
... donde Foo es la subclase de Modelo , que describe los datos que desea almacenar persistentemente.
InMemoryUploadedFile
guardar InMemoryUploadedFile
en ImageField
lugar de ''convertirlo'' en un ImageField
:
image = request.FILES[''img'']
foo.imagefield.save(image.name, image)
donde foo es la instancia del modelo, y el campo de imagen es el ImageField
.
Alternativamente, si está sacando la imagen de un formulario:
image = form.cleaned_data.get(''img'')
foo.imagefield.save(image.name, image)