什么会有更好的表现?哪个更快?这意味着更低的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) 我有一个按姓名搜索的功能,如果搜索与名字或姓氏匹配,则应该返回一个人的姓名.问题是,如果我搜索像'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) 我有一个表单,允许您选择要过滤的多个项目类型.例如,假设您有项目类型"研究","培训"和"评估".
基本上我要做的是使用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对象的查询集的方法?
我正在尝试在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类型.
我感谢您提供的任何建议,帮助或帮助链接.谢谢.
假设这个简单的 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-Q 和 Redis,如果我使用 Django Admin 来管理一切,它会非常有效。现在我已准备好在我的应用程序中重现 Django Admin 提供的功能。我能够管理计划任务,但我不知道如何获取已计划任务以及已成功运行和失败的任务的列表。
关于如何访问已安排的活动列表有什么想法吗?
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)
我做错了吗?或者这可能是一个错误?
我有一个模特
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编写标记系统,但今天我在过滤器或Q对象(django.db.models.Q)中遇到了一个奇怪的行为.
我写了一个函数,将搜索字符串转换为Q对象.下一步是使用这些查询过滤TaggedObject.但不幸的是,我得到了一个奇怪的行为.
当我搜索(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: …
有没有办法在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) 我正在实现搜索功能,并可以选择通过匹配多个表和这些表中的多个字段来查找记录。
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 Wayne和Wayne Bruce,这意味着我仍然有客户的全名,但名字和姓氏的位置名字不固定。
这就是我正在寻找答案的问题:如何构建查询来搜索模型的多个字段,而不知道哪些搜索词属于哪个表。
我猜这个解决方案很简单,并且肯定有一种优雅的方法来创建这样的动态查询,但我想不出一种方法。
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) 我正在运行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 ×13
django-q ×13
python ×4
search ×2
asynchronous ×1
django-1.8 ×1
filter ×1
join ×1
python-2.7 ×1
querying ×1