Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django - how to make ImageField/FileField optional?

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

When I use ImageField (blank=True) and do not select image into admin form, exception occures.

In django code you can see this:

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 has ticket #13327 about this problem, but seems it can't be fixed soon. How to make these field optional?

like image 673
ilya Avatar asked Apr 20 '10 18:04

ilya


2 Answers

blank=True should work. If this attribute, which is False by default, is set to True then it will allow entry of an empty value.

I have the following class in my article app:

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

I make use of the above class in another class by using the ManyToManyField relationship:

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) 

I want to make images in my articles optional, so blank=True in

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

is necessary. This allows me to create an article without any images if I want to.

Are you using class Product in any relationship? If so, make sure to set blank=True in the relationship you are using.

like image 131
orthodoxpirate Avatar answered Sep 19 '22 05:09

orthodoxpirate


Set null=True (see documentation)

class Product(models.Model):     ...         image = models.ImageField(upload_to=generate_filename, blank=True, null=True) 
like image 42
Nathan Avatar answered Sep 19 '22 05:09

Nathan