【问题标题】:Django query to find model instances where somefilefield == None?Django 查询查找 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)
[]

【问题讨论】:

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

标签: python django django-models


【解决方案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)有什么不同?
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 2022-01-12
  • 2020-09-24
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多