En mi modelo PerfilUsuario me gustaría tener una función que devuelve ya sea una imagen predeterminada ImageFileField
objeto del usuario o si el usuario no ha subido su propia cuenta.cree y devolver un ImageFieldFile predeterminado desde el interior de una función
Por ejemplo:
class UserProfile(models.Model):
pic = models.ImageField('Headshot',blank=True,
upload_to=get_path_and_filename)
def get_pic(self):
if self.pic:
return self.pic
else:
# return ImageFileField with a default value
quiero devolver un equivalente ImageFileField
porque tengo filtros que trabajan con este tipo de objeto (por lo que no sólo puede pasar una cadena, fácilmente) ... Probé mirando el source code pero no puedo entender cómo hacerlo yo mismo.
¿Hay una manera fácil de inicializar un nuevo objeto ImageFileField
pasándole una ruta a un archivo de imagen y luego devolverlo?
PS: que había pensado en utilizar una configuración por defecto para la ImageField, sin embargo, parece menos flexible debido a que el archivo se almacena en la creación del modelo ... y si más adelante desea cambiar el archivo predeterminado, Tendría que actualizar todas las entradas de la base de datos que tenían el archivo anterior.
Tienes razón, eso fue un error de mi parte disléxicos (consistente, aunque , Podría agregar). Solo voy a usar la función 'get_pic' en mis plantillas ... espero que esto no sea demasiado" inseguro ". Voy a probar esto mañana. Parece que hará lo que yo quiero. No me di cuenta de que los campos individuales podrían ser 'save()' o 'delete()' ... ¡aprende algo todos los días! Gracias. – thornomad
Parece que debería funcionar, pero me aparece un error: Archivo "/usr/lib/python2.5/site-packages/django/db/models/fields/files.py", línea 23, en __init__ self.storage = field.storage AttributeError: el objeto 'NoneType' no tiene atributo 'storage' Si cambio esto a 'field = self.pic', entonces funciona bien; Intenté pasarle un objeto vacío de ImageField pero eso no funcionó. No estoy seguro de si esto es bueno, pero está funcionando. – thornomad
Oh, eso es correcto. Mentí, no puedes usar un ImageFieldFile así como así. Editando mi respuesta ... – SmileyChris