Django - 如何使ImageField/FileField可选?

ily*_*lya 34 django django-models

class Product(models.Model):
    ...    
    image = models.ImageField(upload_to = generate_filename, blank = True)  
Run Code Online (Sandbox Code Playgroud)

当我使用ImageField(空白= True)并且不选择图像到管理表单时,会发生异常.

在django代码中,您可以看到:

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()
        ...
Run Code Online (Sandbox Code Playgroud)

Django trac有关于这个问题的票#13327,但似乎无法很快修复.如何使这些字段可选?

jet*_*d13 25

blank=True应该管用.如果此属性False(默认情况下)设置为,True那么它将允许输入空值.

我的文章应用程序中有以下类:

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

我通过使用以下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)
Run Code Online (Sandbox Code Playgroud)

我希望我的文章中的图像可选,所以blank=True

photo = models.ManyToManyField(Photo, related_name='photos', blank=True)
Run Code Online (Sandbox Code Playgroud)

有必要的.如果我愿意,这允许我创建一个没有任何图像的文章.

Product在任何关系中使用课程吗?如果是这样,请确保设置blank=True您正在使用的关系.


Nat*_*han 20

设置null=True(见文档)

class Product(models.Model):
    ...    
    image = models.ImageField(upload_to=generate_filename, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

  • null = True是可怕的,空白= True就足够了,因为ImageField/FileField实际上是CharFields ... (37认同)
  • null = True对FileField或ImageField没有任何作用https://code.djangoproject.com/ticket/10244 (24认同)