web-dev-qa-db-fra.com

Django - comment rendre ImageField / FileField facultatif?

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

Lorsque j'utilise ImageField (blank = True) et que je ne sélectionne pas d'image dans le formulaire d'administration, une exception se produit.

Dans le code Django vous pouvez voir ceci:

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 a le ticket # 13327 à propos de ce problème, mais il semble qu'il ne peut pas être corrigé bientôt. Comment rendre ces champs facultatifs?

35
ilya

blank=True devrait marcher. Si cet attribut, qui est False par défaut, est défini sur True, il autorisera la saisie d'une valeur vide.

J'ai la classe suivante dans mon application d'article:

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

J'utilise la classe ci-dessus dans une autre classe en utilisant la relation ManyToManyField:

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)

Je souhaite rendre les images de mes articles facultatives, donc blank=True dans

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

est nécessaire. Cela me permet de créer un article sans aucune image si je le souhaite.

Utilisez-vous la classe Product dans une relation? Si tel est le cas, assurez-vous de définir blank=True dans la relation que vous utilisez.

29
jetbird13

Ensemble null=True (voir documentation )

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