标签: django-q

Django过滤OR - q对象性能与I性能

什么会有更好的表现?哪个更快?这意味着更低的db负载?

Item.objects.filter(Q(creator=owner) | Q(moderated=False))
Run Code Online (Sandbox Code Playgroud)

要么

result = Item.objects.filter(item.creator = owner) | Item.objects.filter(item.moderated = False)
Run Code Online (Sandbox Code Playgroud)

django django-models django-filter django-q

3
推荐指数
1
解决办法
978
查看次数

Django搜索包含空格的字符串

我有一个按姓名搜索的功能,如果搜索与名字或姓氏匹配,则应该返回一个人的姓名.问题是,如果我搜索像'firstname lastname'这样的字符串,它找不到匹配的名称(猜测是因为单词之间的空格).我应该怎么做才能找到合适的搜索?此外,如果我想用相同的搜索搜索用户名(在另一个表中)我该怎么办?非常感谢!

我的代码:

 def search(request):
    query = request.GET.get('q', '')
    if query:
        qset1 = (
            Q(first_name__icontains=query) |
            Q(last_name__icontains=query) 
                 )
        results = UserProfile.objects.filter(qset1).distinct()
    else:
        results = []

    return render_to_response("search/searchName.html", {

    'results': results,     
    'query': query},
    context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

django search django-q

2
推荐指数
1
解决办法
2172
查看次数

django使用Q对象构建查询集

我有一个表单,允许您选择要过滤的多个项目类型.例如,假设您有项目类型"研究","培训"和"评估".

基本上我要做的是使用Q对象构建一个查询集,如:

projects.filter(Q(type__type="Research") | Q(type__type="Training"))
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何在没有filter()输入为字符串的情况下构建它,这会产生错误:

querystring = ""
for t in types:
    querystring += " | Q(type__type="+t+")"
projects.filter(querystring) ## produces error: "ValueError: too many values to unpack"
Run Code Online (Sandbox Code Playgroud)

那么,什么是迭代类型以创建具有Q对象的查询集的方法?

python django django-queryset django-q

2
推荐指数
1
解决办法
1716
查看次数

如何为django Q对象动态加入多个参数

我正在尝试在django sqlite db中实现搜索.

我得到一个未知长度的参数列表,它们都应该与'LIKE'匹配.这意味着我希望所有与至少一个参数匹配的对象.

正如我从django文档中看到的那样,我可以通过使用Q对象来实现.

例:

Students.objects.get(
    Q(name_contains='franz') | 
    Q(birthdate_date=date(2005, 5, 2) | 
    Q(param3_contains='lorem'
)
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如何处理它以加入从params创建的所有Q对象作为参数传递给objects.get().我找不到这个.

这里的另一个问题是处理几种不同的Field Lookup类型.

我感谢您提供的任何建议,帮助或帮助链接.谢谢.

python django join querying django-q

2
推荐指数
1
解决办法
1298
查看次数

如何使用 docker 部署 django-q Worker?

假设这个简单的 docker-compose 文件。

version: "3.9"
   
services:  
  redis:
    image: redis:alpine
    ports:
      - 6379:6379

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - redis
Run Code Online (Sandbox Code Playgroud)

如何添加 django-q Worker 来处理web容器中的任务?

我可能可以使用不同的命令构建相同的图像,例如,python manage.py qcluster但我认为这个解决方案并不优雅。您能建议一些方法来做到这一点吗?

django docker-compose django-q

2
推荐指数
1
解决办法
1437
查看次数

如何从 Django 视图获取计划的 Django-Q 任务列表

全部,

我已经实现了 Django-Q 和 Redis,如果我使用 Django Admin 来管理一切,它会非常有效。现在我已准备好在我的应用程序中重现 Django Admin 提供的功能。我能够管理计划任务,但我不知道如何获取已计划任务以及已成功运行和失败的任务的列表。

关于如何访问已安排的活动列表有什么想法吗?

django asynchronous django-q

2
推荐指数
1
解决办法
1193
查看次数

Django 用空值注释字段

Demand我有一个对象列表,这些对象的allocated字段要么是名称null,要么有一个名称(表示此需求的分配)。

我使用注释来计算每个团队已分配/未分配的数量:

Demand.objects.filter(project=project).values('team').annotate(
            unallocated=Count('allocated', filter=Q(allocated__isnull=True)),
            allocated=Count('allocated', filter=Q(allocated__isnull=False))
        )
Run Code Online (Sandbox Code Playgroud)

奇怪的是,注释的数字allocated显示正确,但 的数字unallocated始终为零。

例如:

list(Demand.objects.filter(project=project).values('allocated', 'team'))
Run Code Online (Sandbox Code Playgroud)

结果如下:

[{'allocated': None, 'team': 'Design'},
{'allocated': None, 'team': 'Engineering'},
{'allocated': None, 'team': 'Engineering'},
{'allocated': None, 'team': 'Engineering'},
{'allocated': None, 'team': 'Delivery'},
{'allocated': None, 'team': 'Product'}]
Run Code Online (Sandbox Code Playgroud)

但注释只有这样:

<QuerySet 
[{'team': 'Delivery', 'unallocated': 0, 'allocated': 0},
{'team': 'Design', 'unallocated': 0, 'allocated': 0},
{'team': 'Engineering', 'unallocated': 0, 'allocated': 0},
{'team': 'Product', 'unallocated': 0, 'allocated': 0}]>
Run Code Online (Sandbox Code Playgroud)

我做错了吗?或者这可能是一个错误?

python django django-q django-annotate

2
推荐指数
1
解决办法
1222
查看次数

使用Q对象进行Django查询?

我有一个模特

class Employee_Type(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=200, verbose_name="employee type")

class Employee(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=200)
    type = models.ForeignKey(Employee_Type)
    address = models.CharField(max_length=500,blank=True, null=True)
    telephone = models.CharField(max_length=100, blank=True, null=True)
    fax = models.CharField(max_length=100, blank=True, null=True)
    email = models.EmailField(max_length=200, blank=True, null=True)
    active = models.BooleanField(default=True) 
Run Code Online (Sandbox Code Playgroud)

我需要查询这样的事情:

 employees = Employee.objects.filter(
                            Q(name__startswith=key_search) \
                            & Q(type__icontian= emp_type)#CAN I DO THIS?
                            Q(active=True)                            
                            )
Run Code Online (Sandbox Code Playgroud)

问题:对

Q(type__= emp_type) (type = models.ForeignKey(Employee_Type)) I cannot do this.
Run Code Online (Sandbox Code Playgroud)

这里有人请帮帮我?

django django-q

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

Django中复杂Q对象过滤器查询的奇怪行为

您好我正在尝试为Django编写标记系统,但今天我在过滤器或Q对象(django.db.models.Q)中遇到了一个奇怪的行为.

我写了一个函数,将搜索字符串转换为Q对象.下一步是使用这些查询过​​滤TaggedObject.但不幸的是,我得到了一个奇怪的行为.

只搜索一个Tag元素:

当我搜索(id=20)=> Q: (AND: ('tags__tag__id', 20)) 并返回2个ID为1127和132的Taged Objects时

当我搜索(id=4)=> Q: (AND: ('tags__tag__id', 4)) 并且它还返回2个对象,但这次是1180和1127

这是重新设置的SQL查询:

SELECT "django_content_type"."id", "django_content_type"."name", "django_content_type"."app_label", "django_content_type"."model" 
FROM "django_content_type" 
WHERE ("django_content_type"."model" = slogan  AND "django_content_type"."app_label" = slogans ) 
ORDER BY "django_content_type"."name" ASC

SELECT "slogans_slogan"."id", "slogans_slogan"."headline", "slogans_slogan"."text", "slogans_slogan"."author"
FROM "slogans_slogan"
  INNER JOIN "htags_objecttagbridge" ON ("slogans_slogan"."id" = "htags_objecttagbridge"."object_id")
WHERE ("htags_objecttagbridge"."tag_id" = 4  AND "htags_objecttagbridge"."content_type_id" = 9 )
LIMIT 21
Run Code Online (Sandbox Code Playgroud)

使用'或'结合搜索两个标签:

直到这里一切都很好,但当我做一个更复杂的查询,如(id=4) or (id=20)=> Q: (OR: ('tags__tag__id', 4), ('tags__tag__id', 20)) 然后它返回4(!)对象1180,1127,1127,132

和SQL: …

django search filter django-q

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

Django - 如何将QuerySet转换为Q对象?

有没有办法在Qjango中将QuerySet转换为Q对象?

我的具体动机:我想从另一个QuerySet(qs_B)中减去一个QuerySet(qs_A).我能想到的唯一方法是使用exclude()和一个等同于qs_A的Q对象.

例:

def my_function(qs_A, qs_B):
    # Here I need to transform qs_A to a Q object q_obj_A
    qs_new = qs.exclude(q_obj_A)
    return qs_new
Run Code Online (Sandbox Code Playgroud)

django django-queryset django-q

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

使用可变数量的参数过滤多个 Django 模型字段

我正在实现搜索功能,并可以选择通过匹配多个表和这些表中的多个字段来查找记录。

Customer假设我想通过他/她的名字或姓氏,或者通过存储Order在与 不同模型中的放置 ID 来查找Customer。我已经实现的简单场景是用户仅在搜索字段中输入单个单词,然后我使用 Django使用直接字段引用或类似引用Q来查询模型:Orderrelated_query_name

result = Order.objects.filter(
        Q(customer__first_name__icontains=user_input)
        |Q(customer__last_name__icontains=user_input)
        |Q(order_id__icontains=user_input)
        ).distinct()
Run Code Online (Sandbox Code Playgroud)

小菜一碟,完全没有问题。

但是,如果用户想要缩小搜索范围并在搜索字段中输入多个单词该怎么办?

示例:用户输入Bruce并通过搜索返回大量记录。

现在他/她想要更具体,并将客户的姓氏添加到搜索中。因此Bruce Wayne,在将其分成我拥有的单独部分之后,搜索Bruce变为 和Wayne。显然,我不想搜索Orders模型,因为order_id它是一个单词实例,并且足以立即找到客户,因此对于这种情况,我完全将其从查询中删除。

现在我试图通过名字和姓氏来匹配客户,我还想处理提供数据的顺序是随机的情况,以正确处理Bruce WayneWayne Bruce,这意味着我仍然有客户的全名,但名字和姓氏的位置名字不固定。

这就是我正在寻找答案的问题:如何构建查询来搜索模型的多个字段,而不知道哪些搜索词属于哪个表。

我猜这个解决方案很简单,并且肯定有一种优雅的方法来创建这样的动态查询,但我想不出一种方法。

django django-queryset django-q

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

如何使用 Q Objects 在 django 模型中查询 float/int 值或字符串?

Django 版本=1.8,IDE=pycharm,python 2.7

我有一个搜索表单,我想根据与产品标题或产品描述或产品价格匹配的字符串在模型中搜索和列出项目(“产品”)。

下面是我在 views.py 中的“searchitems”部分。我也很困惑下面的行在 get_queryset 函数中做了什么。干杯

   qs = super(ProductListView, self).get_queryset(*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)

#

# Search inside model function
def get_queryset(self, *args, **kwargs):
    qs = super(ProductListView, self).get_queryset(*args,**kwargs)
    query = self.request.GET.get("q")
    if query:
        qs = self.model.objects.filter(

            Q(title__icontains=query) |
            Q(description__icontains=query) |
            Q(price=query)
        )
    return qs

class ProductListView(ListView):
    model = Product
    queryset=Product.objects.all()  #no need to define this as it is a default
    def get_context_data(self, *args, **kwargs):
        context = super(ProductListView, self).get_context_data(*args, **kwargs)
        return context
Run Code Online (Sandbox Code Playgroud)

下面是models.py

    from django.db import models
    from django.core.urlresolvers import reverse
    from …
Run Code Online (Sandbox Code Playgroud)

python django python-2.7 django-1.8 django-q

0
推荐指数
1
解决办法
4227
查看次数

TypeError:|:'bool'和'Q'不支持的操作数类型

我正在运行Django 1.7,并且TypeError: unsupported operand type(s) for |: 'bool' and 'Q'在尝试执行以下操作时遇到问题:

class PersonList(generic.ListView):
    template_name = "persons/list.html"
    model = Person
    queryset = Person.objects.filter(Q(field1__isnull=True | Q(field2__isnull=True)))
Run Code Online (Sandbox Code Playgroud)

django django-q

-2
推荐指数
1
解决办法
2565
查看次数