Django queryset过滤器文件字段不为空

时间:2015-03-16 09:30:23

标签: python django postgresql django-queryset

我尝试过滤查询集,排除没有文件的查询集。我无法通过无数次迭代来实现它。

class Something(models.Model):
    name = models.CharField(max_length=512)
    file = models.FieldField(upload_to="files", null=True, blank=True)

然后,获取带文件的那个

 # this give me all objects
 Something.objects.exclude(file__exact='')

 # this is a valid solution, but hell, something easier should exist, 
 something_with_files = set()
 for s in Something.objects.all():
    if s.file:
        something_with_files.add(s)

这是什么真正的解决方案?

PS:在PostGres上工作,不知道那时能不能改变任何东西。

5 个答案:

答案 0 :(得分:13)

这里没有必要:

Something.objects.exclude(file='')

答案 1 :(得分:3)

我认为有更好的选择:

from django.db.models import Q    

Something.objects.filter(~Q(file__isnull=True))

Something.objects.exclude(file__isnull=True)

答案 2 :(得分:0)

你的字段允许空值,所以我猜没有文件的那些字段为空,而不是空字符串。试试这个:

Something.objects.exclude(file=None)

答案 3 :(得分:0)

这对我来说非常合适:

var s = File("hello.txt").inputStream()

https://books.agiliq.com/projects/django-orm-cookbook/en/latest/filefield.html

答案 4 :(得分:0)

我认为我们可以使用以下方法直接过滤掉空值:

input

在过滤器中,您可以提供多个值,但在exclude子句中,您不能提供多个值。您必须将链与排除一起使用。

有关Django过滤器的更多详细信息,请排除此link