我正在尝试构建我正在构建的Django站点的搜索,并且在搜索中我正在搜索3种不同的模型.为了获得搜索结果列表的分页,我想使用通用的object_list视图来显示结果.但要做到这一点,我必须将3个查询集合并为一个.
我怎样才能做到这一点?我试过这个:
result_list = []
page_list = Page.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term))
article_list = Article.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term) |
Q(tags__icontains=cleaned_search_term))
post_list = Post.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term) |
Q(tags__icontains=cleaned_search_term))
for x in page_list:
result_list.append(x)
for x in article_list:
result_list.append(x)
for x in post_list:
result_list.append(x)
return object_list(
request,
queryset=result_list,
template_object_name='result',
paginate_by=10,
extra_context={
'search_term': search_term},
template_name="search/result_list.html")
Run Code Online (Sandbox Code Playgroud)
但这不起作用当我尝试在通用视图中使用该列表时,我收到错误.该列表缺少clone属性.
有人知道如何合并三个列表page_list
,article_list
和post_list
?
在Django模型QuerySets中,我看到有一个__gt
和__lt
for的比较值,但是有__ne
/ !=
/ <>
(不等于?)
我想用不等于过滤掉:
例:
Model:
bool a;
int x;
Run Code Online (Sandbox Code Playgroud)
我想要
results = Model.objects.exclude(a=true, x!=5)
Run Code Online (Sandbox Code Playgroud)
在!=
不正确的语法.我试过__ne
,<>
.
我最终使用:
results = Model.objects.exclude(a=true, x__lt=5).exclude(a=true, x__gt=5)
Run Code Online (Sandbox Code Playgroud) 我有first_name,last_name和别名(可选)我需要搜索.所以,我需要一个查询来给我所有具有别名集的名称.
只有我能做到:
Name.objects.filter(alias!="")
Run Code Online (Sandbox Code Playgroud)
那么,与上述相同的是什么?
如何从QuerySet对象获取Django将在数据库中使用的SQL?我正在尝试调试一些奇怪的行为,但我不确定哪些查询会进入数据库.谢谢你的帮助.
我如何在django过滤器中执行"或"操作.
基本上,我希望能够列出用户添加的项目(它们被列为创建者)或项目已被批准
所以我基本上需要选择
item.creator = owner or item.moderated = False
Run Code Online (Sandbox Code Playgroud)
我如何在django中执行此操作(最好使用过滤器/查询集)
我想写一个等同于这个SQL查询的Django查询:
SELECT * from user where income >= 5000 or income is NULL.
Run Code Online (Sandbox Code Playgroud)
如何构造Django queryset过滤器?
User.objects.filter(income__gte=5000, income=0)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它AND
是过滤器.我想过OR
滤器来获得各个查询集的联合.
我确定这是一个微不足道的操作,但我无法弄清楚它是如何完成的...如何为值列表创建一个django查询.
必须有比这更聪明的东西:
ids = [1, 3, 6, 7, 9]
for id in ids:
MyModel.objects.filter(pk=id)
Run Code Online (Sandbox Code Playgroud)
我想把它们全部放在一个节目中,例如:
MyModel.objects.filter(pk=[1, 3, 6, 7, 9])
Run Code Online (Sandbox Code Playgroud) 我在一个模型中有一个字段
class Sample(models.Model):
date = fields.DateField(auto_now=False)
Run Code Online (Sandbox Code Playgroud)
现在,我需要按数据范围过滤对象,例如,2011年1月1日到2011年1月31日之间的所有对象?
谢谢你的帮助!
当我要求模型管理器获取一个对象时,它会DoesNotExist
在没有匹配对象时引发.
go = Content.objects.get(name="baby")
Run Code Online (Sandbox Code Playgroud)
相反的DoesNotExist
,我怎么能有go
可以None
代替?
我试图过滤DateTimeField
与日期的比较.我的意思是:
MyObject.objects.filter(datetime_attr=datetime.date(2009,8,22))
Run Code Online (Sandbox Code Playgroud)
我得到一个空的查询集列表作为答案因为(我认为)我不考虑时间,但我想"随时".
Django有这么简单的方法吗?
我有时间在日期时间设置,但事实并非如此00:00
.
django ×10
django-queryset ×10
python ×7
filter ×2
sql ×2
datetime ×1
django-orm ×1
django-q ×1
null ×1
search ×1