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

Spo*_*k16 10 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)
Run Code Online (Sandbox Code Playgroud)

然后,获取一个文件

 # 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)
Run Code Online (Sandbox Code Playgroud)

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

PS:在PostGres上工作,不知道那时能不能改变什么.

Eug*_*tov 18

这里没有必要:

Something.objects.exclude(file='')
Run Code Online (Sandbox Code Playgroud)

  • 如果它对其他人有用,我还必须使用`Something.object.exclude(Q(file ='')| Q(file__exact = None))排除`file__exact = None`. (3认同)

daa*_*awx 7

这对我来说非常有效:

objects = MyModel.objects.exclude(
    Q(file='')|Q(file=None)
)
Run Code Online (Sandbox Code Playgroud)

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


sim*_*imP 5

我认为有更好的选择:

from django.db.models import Q    

Something.objects.filter(~Q(file__isnull=True))
Run Code Online (Sandbox Code Playgroud)

要么

Something.objects.exclude(file__isnull=True)
Run Code Online (Sandbox Code Playgroud)