2012-07-12 14 views
11

Tengo un modelo con un PictureImageField. Al eliminar una instancia de Picture, no se elimina el archivo establecido en ImageField.archivo de imagen no elimina al objeto con el campo ImageField se elimina

¿Es un error? ¿Cómo puedo hacerlo?

+0

¿Cómo es tu punto de vista parece? – rh0dium

+0

No tengo vista. – jul

+0

posible duplicado de [¿Cómo obtengo que Django Admin elimine archivos cuando elimino un objeto de la base de datos/modelo?] (Http://stackoverflow.com/questions/5372934/how-do-i-get-django-admin -to-delete-archivos-en-i-quito-un-objeto-de-la-datab) –

Respuesta

25

Supresión de archivos asociados con FileField s y ImageField s era intencionalmente eliminado en Django 1.3. Ver ticket #6456. Django usa las transacciones extensamente para evitar la corrupción de datos si algo sale mal con la solicitud. Si se realiza una transferencia de una transacción de eliminación, después de que el archivo se haya eliminado del sistema de archivos, entonces ahora tiene un registro que apunta a un archivo inexistente. Todas las entradas que solicitan la eliminación automática para volver han sido marcadas sumariamente "No se Corrigirá", por lo que esto no va a cambiar.

Para soluciones, consulte this previous StackOverflow question.

0

¿Las suposiciones?

class Picture(models.Model): 
    image = ImageField(blank=True, null=True, upload_to="pics") 

    def delete(self, *args, **kwargs): 
     self.image.delete() 
     super(Picture, self).delete(*args, **kwargs) 

luego le permite crear y eliminar manualmente este ..

image = "./image.jpg" 
picture = Picture.objects.create(image=File(open(image, "r")) 
picture.save() 

Entonces eliminarla?

picture.delete()

HTH

+5

Aunque esta respuesta es ya muy antigua: la línea 5 en el primer bloque de código debe ser 'self.image.delete()' – Tim

+2

Y es mejor usar señales ya que no funciona para 'Picture.objects.filter (...). Delete()' por ejemplo. – Sassan

Cuestiones relacionadas