【发布时间】:2021-03-13 10:39:36
【问题描述】:
我正在开发一个项目管理系统 Django 项目。 基本上在导航栏中,我实现了一个搜索器来搜索特定项目,如标题、客户、描述等。
我想让他们也可以搜索紧急项目(在我的项目模型中紧急是一个布尔字段),但我实现它的方式不起作用。
这是我的项目模型:
class Project(models.Model):
title = models.CharField(max_length=255)
description = models.CharField(max_length=1000)
client = models.ForeignKey(Cliente, on_delete=models.CASCADE)
complete = models.BooleanField(default=False)
urgent = models.BooleanField(default=False)
deadline = models.DateField()
...
制作搜索栏(在我的html文件中是:)
<form method="get" class="form-inline">
<input class="form-control mr-sm-2" name="q" id="id_q" type="text" placeholder="Search..." aria-label="Search" value="{{query}}">
<button class="btn btn-outline-dark my-2 my-sm-0" type="submit">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-search" fill="currentColor"
xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M10.442 10.442a1 1 0 0 1 1.415 0l3.85 3.85a1 1 0 0 1-1.414 1.415l-3.85-3.85a1 1 0 0 1 0-1.415z"/>
<path fill-rule="evenodd"
d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/>
</svg>
</button>
</form>
我是如何实现这个功能的:
def get_projects_qs(proj, query=None):
queryset = []
queries = query.split(" ")
for q in queries:
projects = proj.filter( Q(title__icontains=q) | Q(description__icontains=q) | Q(urgent__icontains=q) | Q(client__client__icontains=q) ).distinct()
for project in projects:
queryset.append(project)
return list(set(queryset))
现在,如果我执行 Q(urgent_icontains=q) 它不起作用,但如果我执行 Q(urgent=q) 它仅在第一次起作用,然后我收到此错误:
ValidationError at /marketing/
['“” value must be either True or False.']
【问题讨论】:
-
您的问题不清楚。再次仔细询问您想要做什么的所有细节并提供完整代码
-
对不起,英语不是我的第一语言,我才刚刚开始编码。我会尝试更好地解释...我有几个项目对象,其中包括标题、描述和布尔值的紧急状态。使用 serachbar,我可以搜索项目的标题或描述,但无法搜索紧急属性设置为 True 的项目。我使用 Q 查找使搜索器工作,但它不适用于紧急字段,我不知道该尝试什么
-
好的。如果产品是否紧急,我会建议用户可以选择的结构
标签: django django-queryset django-filter searchbar django-q