标签: django-q

Django:从`QuerySet`中提取`Q`对象

我有一个Django QuerySet,我想从中获取一个Q对象.(即,它与查询集保持完全相同的查询.)

那可能吗?如果是这样,怎么样?

python django django-orm django-q

7
推荐指数
1
解决办法
623
查看次数

Django SQL OR via filter()&Q():动态?

我正在我的Django网站上实现一个简单的LIKE搜索,我目前使用的是以下代码:

from django.db.models import Q
posts = Post.objects.filter(Q(title__icontains=query)|Q(content__icontains=query))
Run Code Online (Sandbox Code Playgroud)

query字符串在哪里.这导致LIKESQL语句并且工作正常.现在,我还想将搜索查询拆分为术语或单词:

words = query.split(' ')
Run Code Online (Sandbox Code Playgroud)

所以words现在包含一个单词列表,我想实现类似于以下的SQL语句:

SELECT ... FROM foo WHERE `title` ILIKE '%word1%' OR `title` ILIKE '%word2%'
  OR `content` ILIKE '%word1%' OR `content` ILIKE '%word2%'
Run Code Online (Sandbox Code Playgroud)

如果有两个以上的单词,我希望语句增长,按每个单词列出所有条目.

有任何想法吗?谢谢!

django django-queryset django-q

6
推荐指数
1
解决办法
2131
查看次数

django queryset中的Q对象

g = Goal.objects.filter(Q(title__contains=term) | Q(desc__contains=term))
Run Code Online (Sandbox Code Playgroud)

我怎样才能添加到我的filter那个user=request.user

这不起作用:

g = Goal.objects.filter(user=request.user, Q(title__contains=term) | Q(desc__contains=term))
Run Code Online (Sandbox Code Playgroud)

楷模:

class Goal(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=255)
    desc = models.TextField()
Run Code Online (Sandbox Code Playgroud)

django django-q

6
推荐指数
1
解决办法
3384
查看次数

在Django中否定Q对象

我有一个动态创建的复杂Q对象.如何否定Q对象以便可以filter()代替exclude()

python django django-q

6
推荐指数
1
解决办法
1069
查看次数

'Q'对象没有属性'split' - Django

我有一个模型:

class Authors(models.Model):
   name = models.TextField()
   person = models.ForeignKey(Person)
Run Code Online (Sandbox Code Playgroud)

和查询:

authors = Author.objects.filter(
                                (Q(name__iregex=r"\y{0}\y".format(s1)),
                                ~Q(name__iregex=r"\y{0}\y".format(s2))
                                ),
                                person=None).order_by('-id')
Run Code Online (Sandbox Code Playgroud)

我收到错误:

'Q' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我没有使用split()..错误行在此查询行中.

python django django-q

6
推荐指数
1
解决办法
3606
查看次数

制作 Q 对象的正确方法是过滤 Django QuerySet 中的所有条目?

现在我只使用Q(id=0),这取决于数据库。或者也许Q(pk__isnull=True)更好?它对于使用 of|运算符连接 Q 对象很有用。

django django-queryset django-q

6
推荐指数
1
解决办法
2682
查看次数

Django查询集过滤器 - Q()| VS __in

有什么区别

queryset.filter(Q(foo='bar') | Q(foo='baz'))
Run Code Online (Sandbox Code Playgroud)

queryset.filter(foo__in=['bar', 'baz'])
Run Code Online (Sandbox Code Playgroud)

我发现有时他们会产生不同的结果,我无法弄清楚为什么.

我对这些查询得到了不同的结果:

In [8]: Profile.objects.filter(image="").count()
Out[8]: 7173

In [9]: Profile.objects.filter(image=None).count()
Out[9]: 25946

In [10]: Profile.objects.filter(image__in=["", None]).count()
Out[10]: 7173

In [11]: Profile.objects.filter(Q(image="") | Q(image=None)).count()
Out[11]: 33119
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL作为我的数据库引擎.

django filter django-orm django-queryset django-q

6
推荐指数
1
解决办法
5185
查看次数

将 Q 对象与变量一起使用

我想以查询项来自变量的方式使用 django.db.models.Q 对象。

我想要实现的目标与此相同:

q = Q(some_field__icontains='sth')
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)

,但 some_field 值应该来自变量:

field_name='some_field'
q = Q('%s__icontains=sth' % field_name)
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)

,但是这个解决方案当然不会给我正确的结果。

我也尝试这样使用字典:

dt = {'%s__icontains' % field_name: 'sth'}
q = Q(**dt)
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)

,但这在结果上也失败了。

如何使用变量作为查询项来使用 Q 对象?

谢谢。

python django django-q

6
推荐指数
1
解决办法
1478
查看次数

django 查询中 or-ing Q 对象的性能影响

我正在执行一个查询,该查询将一堆 Q 组合在一起,这似乎花费了很多时间。这是一些伪代码

query_params = []
for i in range(80): #there are about 80ish Q objects being created
    query_params.append(Q(filter_stuff))
Run Code Online (Sandbox Code Playgroud)

然后我或他们一起

query_params = reduce(or_, query_params)
Run Code Online (Sandbox Code Playgroud)

当我执行查询时

query = list(MyModel.objects.filter(query_params))
Run Code Online (Sandbox Code Playgroud)

它挂了很长时间。我知道这是一个非常普遍的问题,如果不深入了解数据结构,就很难给出诊断(这里很难给出)。但我只是好奇Qdjango 查询中的 or-ing对象是否存在固有的性能影响

python sql django django-q

5
推荐指数
1
解决办法
997
查看次数

Django CheckConstraint:反向外键查找的元素不能为空

我有这些模型:

class Container(models.Model):
    ...
    class Meta:
        constraints = [
            models.CheckConstraint(
                 check=~Q(elements=None),
                 name='container_must_have_elements'
            ),
        ]

class Element(models.Model):
    container = models.ForeignKey(Container),
        related_name='elements',
        on_delete=models.CASCADE
    )
Run Code Online (Sandbox Code Playgroud)

我想强制每个Container对象必须至少有一个Element通过外键关系引用它的约束。

如您所见,我已经添加了一个检查约束。但是,对象~上的否定运算符Q似乎是被禁止的。django.db.utils.NotSupportedError: cannot use subquery in check constraint当我尝试应用生成的迁移时,我得到了。

如果没有否定运算符,约束似乎是有效的(它只会由于数据完整性错误而失败)。

有没有另一种方法可以表达这个约束,以便它支持CheckConstraint?(例如,有没有办法检查集合是否elements为空?)

django django-models check-constraints django-orm django-q

5
推荐指数
1
解决办法
989
查看次数