2011-09-30 29 views
6

que tienen un método personalizado limpia a continuación:Django dimensiones validar ImageField etc

def clean_image(self): 
    image = self.cleaned_data['image'] 
    if image: 
     from django.core.files.images import get_image_dimensions 
     w, h = get_image_dimensions(image) 
     if not image.content_type in settings.VALID_IMAGE_FORMATS: 
      raise forms.ValidationError(u'Only *.gif, *.jpg and *.png images are allowed.') 
     if w > settings.VALID_IMAGE_WIDTH or h > settings.VALID_IMAGE_HEIGHT: 
      raise forms.ValidationError(u'That image is too big. The image needs to be ' + str(settings.VALID_IMAGE_WIDTH) + 'px * ' + str(settings.VALID_IMAGE_HEIGHT) + 'px (or less).') 
     return image 

El escenario problema es el siguiente:

Una imagen se ha subido. Ahora quiero borrarlo usando la casilla de verificación que aparece con el widget ImageField. Al enviar el formulario para dejar esto en claro, el claro no.

Si elimino mi método de limpieza personalizado, el borrado funciona. Por lo tanto, creo que mi método está haciendo algo mal.

+3

intentar deshacer la sangría del retorno de modo que es en línea con la sentencia if , es decir, siempre devuelve los datos. –

Respuesta

0

Creo que no está devolviendo la imagen de cleaned_data. Debes comprobarlo, porque tu codificación se ve bien.

9

Hay 3 problemas cuando Django se dan cuenta de esta validaciones:

  1. Django necesitan obtener el valor de estos campos, siempre se necesita devolver un valor
  2. Necesita poner Meta clase con el nombre del modelo que utilizó.
  3. En esta frases necesita puesto .get esta manera

    self.cleaned_data.get['image'] 
    
  4. El código es el siguiente:

    class Meta: 
        model = NameModel  
    
    def clean_image(self): 
        image = self.cleaned_data.get['image'] 
        if image: 
         from django.core.files.images import get_image_dimensions 
         w, h = get_image_dimensions(image) 
         if not image.content_type in settings.VALID_IMAGE_FORMATS: 
          raise forms.ValidationError(u'Only *.gif, *.jpg and *.png images are allowed.') 
         if w > settings.VALID_IMAGE_WIDTH or h > settings.VALID_IMAGE_HEIGHT: 
          raise forms.ValidationError(u'That image is too big. The image needs to be ' +  str(settings.VALID_IMAGE_WIDTH) + 'px * ' + str(settings.VALID_IMAGE_HEIGHT) + 'px (or less).') 
        return image 
    
+0

El punto 1 es la respuesta aquí: debe asegurarse de que 'clean_image' devuelve un valor, esto permite que ocurra la función de borrado de administrador de Django. – jamesc

+1

Recibía errores "No subscriptables" hasta que cambié lo anterior a 'image = self.cleaned_data ['image']' – shacker

Cuestiones relacionadas