Django ORM查询空FileFields

时间:2016-09-03 00:26:46

标签: python django orm

我不清楚这是否可以通过ORM实现 - 它似乎不是这样,但也许我错过了什么?

   class ApplicationInstitution(models.Model):
       ...
       transcript_file = FileField(upload_to=...)

其中一些ApplicationInstitution个对象可能已经上传了transcript_file,而其他人则没有。我想查询具有空FileField的实例。起初我以为我可以像

那样

ApplicationInstitution.objects.filter(transcript_file__isnull=False)

或类似,但这会产生意外结果(所有记录或零,取决于您使用filter还是exclude)。如果你试图访问实际的文件对象,你会得到一个Raise,而不是一个空的:

>>> a.institutions.last().transcript_file.file
Traceback (most recent call last):
...
ValueError: The 'transcript_file' attribute has no file associated with it.

我已经使用try / except编写了一个模型方法来获得答案,但ORM会更清晰。是否可以查询空的或非空的FileFields?

2 个答案:

答案 0 :(得分:2)

您可以查询空字符串:

# instances with empty FileField
ApplicationInstitution.objects.filter(transcript_file='')
# and with a file already uploaded
ApplicationInstitution.objects.exclude(transcript_file='')

答案 1 :(得分:-1)

DBRef

并尝试使用transcript_file = FileField(upload_to=..., null=True) 而不使用文件:

ApplicationInstitution
带文件的ApplicationInstitution.objects.filter(transcript_file__isnull=True)

ApplicationInstitution