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 Q AND 查找 - 在复杂查找中查询多个条目
如何链接 Django 的“in”和“iexact”查询集字段查找?