Django 查询查找 somefilefield == None 的模型实例?

Posted

技术标签:

【中文标题】Django 查询查找 somefilefield == None 的模型实例?【英文标题】:Django query to find model instances where somefilefield == None? 【发布时间】:2011-08-06 01:38:18 【问题描述】:

给定模型:

class Person(models.Model):
    name = models.CharField(max_length=200)
    resume = models.FileField(upload_to='resumes/', blank=True, null=True)

我通过以下方式创建了一些人:

Person.objects.create(name='Brad')
Person.objects.create(name='Tony')

如何使用 ORM 编写查询以向我提供没有 resume 的人。我尝试了以下方法,但都未能返回所需的结果:

>>> Person.objects.filter(resume=None)
[]
>>> Person.objects.filter(resume__exact=None)
[]
>>> Person.objects.filter(resume__isnull=True)
[]

【问题讨论】:

复制:***.com/questions/844556/… 这不是重复的,它们是不同的问题。 这似乎是一个不同的问题,因为它处理需要不同解决方案的 FileFields,因为它们是 CharFields。这是很好的信息。另一个问题没有讨论这种情况。 请定义“失败”。由于我们不知道“失败”是什么意思,我们无法真正猜测示例问题出了什么问题。 file 字段也很特殊,因为它们实际上并不数据库中。 @S.Lott 我已经编辑了问题以澄清。 【参考方案1】:

我很确定你是按空字符串''过滤的

Person.objects.filter(resume='')

基础字段是CharField(),如docs for Filefield 所述。

Django 将 CharFields 的空白存储为不为 NULL 的空字符串,因此过滤空字符串可以获得没有简历的人。

Model Field References regarding Null

【讨论】:

谢谢,这对我有用。 FileField永远会是None吗? 查看博文here FileField 的文档没有提到必须检查空字符串而不是 None,该博客文章也没有提及。 @bradly.ayers 文档将底层字段称为 CharField,博客讨论了为什么 null 在 CharFields 的数据库中存储为空字符串。 @kriegar 博文中的哪一段谈到了这一点?【参考方案2】:

试试

Person.objects.filter(resume__exact = None)

在这里阅读文档

http://docs.djangoproject.com/en/dev/ref/models/querysets/#id6

【讨论】:

这和Person.objects.filter(resume=None)有什么不同?

以上是关于Django 查询查找 somefilefield == None 的模型实例?的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用查询集和正则表达式查找重复项

Django Q AND 查找 - 在复杂查找中查询多个条目

如何编写查询以在 django 的 json 字段中查找值

如何链接 Django 的“in”和“iexact”查询集字段查找?

什么是 django 查询来查找搜索日期在两列之间的记录不是?

Django 在不使用字段查找的情况下从查询集中排除特定实例