python Django - FileField检查是否为None

iezvtpos  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(198)

我有一个带有可选文件字段的模型

class MyModel(models.Model):
  name = models.CharField(max_length=50)
  sound = models.FileField(upload_to='audio/', blank=True)

让我们把一个值

>>> test = MyModel(name='machin')
>>> test.save()

为什么我能得到这个?

>>> test.sound
<FieldFile: None>
>>> test.sound is None
False

如何检查是否有文件集?

ojsjcaue

ojsjcaue1#

if test.sound.name: 
     print "I have a sound file"
else:   
     print "no sound"

此外,当没有文件时,FileField的布尔值将为False:bool(test.sound) == Falsetest.sound.name是假的。

4c8rllxm

4c8rllxm2#

在Django中,当你定义一个可选的文件字段,比如sound = models.FileField(upload_to ='audio/',blank=True),这个字段可以是空的(也就是说,不与任何文件相关联),但它不是None。相反,它是FieldFile类的示例。当您创建MyModel的示例而没有为声场指定文件时,它将使用空FieldFile对象进行初始化。这就是为什么在打印test. sound时会看到。要检查是否为字段设置了文件,可以使用FieldFile的bool()方法。下面是一个例子:
Python

test.sound  # Empty FieldFile object
<FieldFile: None>
bool(test.sound)  # Check if file is set
False

FieldFile的bool()方法在没有文件与字段关联时返回False,否则返回True。因此,您可以使用bool(test.sound)来确定是否为模型示例中的声场设置了文件。

fsi0uk1n

fsi0uk1n3#

根据这个answer从一个不同的问题,你可以试试这个:

class MyModel(models.Model):
  name = models.CharField(max_length=50)
  sound = models.FileField(upload_to='audio/', blank=True)

def __nonzero__(self):
    return bool(self.sound)

相关问题