2010-04-20 17 views
26
class Product(models.Model): 
    ...  
    image = models.ImageField(upload_to = generate_filename, blank = True) 

Cuando uso ImageField (blanco = Verdadero) y no selecciono la imagen en el formulario de administrador, se produce una excepción.Django: ¿cómo hacer que ImageField/FileField sea opcional?

En el código Django se puede ver esto:

class FieldFile(File): 
    .... 

    def _require_file(self): 
     if not self: 
      raise ValueError("The '%s' attribute has no file associated with it." % self.field.name) 

    def _get_file(self): 
     self._require_file() 
     ... 

Django trac tiene el boleto # 13327 sobre este problema, pero parece que no se puede arreglar pronto. ¿Cómo hacer que estos campos sean opcionales?

+0

le parecieron una solución, parece que tengo el mismo problema ahora – niklas

Respuesta

19

Conjunto null=True (ver documentation)

class Product(models.Model): 
    ...  
    image = models.ImageField(upload_to=generate_filename, blank=True, null=True) 
+31

nula = verdad da miedo, en blanco = True es suficiente porque ImageField/FileField son en realidad CharFields debajo ... – dlamotte

+21

nula = True no hace nada para FileField o ImageField https://code.djangoproject.com/ticket/10244 – nont

13

blank=True debería funcionar. Si este atributo, que es False de forma predeterminada, se establece en True, entonces permitirá la entrada de un valor vacío.

Tengo la siguiente clase en mi artículo aplicación:

class Photo(models.Model): 
     imagename = models.TextField() 
     articleimage = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True) 

hago uso de la clase anterior en otra clase mediante el uso de la ManyToManyField relación:

class Article(models.Model): 
     pub_date = models.DateTimeField(default=timezone.now) 
     slug = models.SlugField(max_length=130) 
     title = models.TextField() 
     photo = models.ManyToManyField(
      Photo, related_name='photos', blank=True) 
     author = models.ForeignKey(User) 
     body = models.TextField() 
     categories = models.ManyToManyField(
      Category, related_name='articles', null=True) 

Quiero hacer imágenes en mis artículos son opcionales, por lo que blank=True en

photo = models.ManyToManyField(Photo, related_name='photos', blank=True) 

es necesario. Esto me permite crear un artículo sin imágenes si quiero.

¿Estás utilizando la clase Product en cualquier relación? Si es así, asegúrese de establecer blank=True en la relación que está utilizando.

Cuestiones relacionadas