繁体   English   中英

Django查询集过滤器文件字段不为空

[英]Django queryset filter filefield not empty

我正在尝试过滤查询集,以排除没有文件的查询集。 我不能让它工作,除非无数次迭代。

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 上工作,我不知道那会不会改变任何事情。

这里不需要精确:

Something.objects.exclude(file='')

有更好的选择,我认为:

from django.db.models import Q    

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

或者

Something.objects.exclude(file__isnull=True)

这对我来说非常有效:

objects = MyModel.objects.exclude(
    Q(file='')|Q(file=None)
)

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

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

Something.objects.filter(file__isnull=False)

在过滤器中,您可以提供多个值,但在排除子句中,您不能提供多个值。 您必须使用带排除的链接。

有关 Django 过滤器和排除的更多详细信息,您可以参考此链接

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

Something.objects.exclude(file=None)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM