【发布时间】:2021-09-13 11:00:28
【问题描述】:
请帮我解决我的问题。我想先按一个过滤器排序对象,然后再按另一个过滤器排序。
如何在 1 次查询中获取具有此排序的对象到数据库(需要分页)?
这个例子展示了没有排序的查询集:
rooms = Room.objects.filter(Q(name__icontains=search) | Q(owner__username__icontains=search))
我有房间模型:
models.py
from django.db import models
from django.contrib.auth.models import User
class Room(models.Model):
name = models.CharField(max_length=150)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
views.py(我的错误代码)
class RoomListView(ListAPIView):
def get_queryset(self):
search = 'test' # for example
rooms1 = Room.objects.filter(owner__username__icontains=search)
rooms2 = Room.objects.filter(name__icontains=search)
return list(rooms1) + list(rooms2)
错误的结果: search = "test"
[
{
"id":1,
"name":"test",
"owner":{
"username":"user1"
}
},
{
"id":2,
"name":"room1",
"owner":{
"username":"test"
}
},
{
"id":3,
"name":"test2",
"owner":{
"username":"user2"
}
}
]
正确结果: search = "test"
[
{
"id":2,
"name":"room1",
"owner":{
"username":"test"
}
},
{
"id":1,
"name":"test",
"owner":{
"username":"user1"
}
},
{
"id":3,
"name":"test2",
"owner":{
"username":"user2"
}
}
]
如何在 1 次查询中获取具有此排序的对象到数据库(需要分页)?
【问题讨论】:
标签: django django-models django-views django-orm django-database