Django在查询集中找到项目并获得下一个
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django在查询集中找到项目并获得下一个相关的知识,希望对你有一定的参考价值。
我正在尝试获取一个对象,查找一个查询集,在该查询集中找到该项,然后找到下一个。
@property
def next_object_url(self):
contacts = Model.objects.filter(owner=self.owner).order_by('-date')
place_in_query = list(contacts.values_list('id', flat=True)).index(self.id)
next_contact = contacts[place_in_query + 1]
[当我将其添加到模型并运行它时,这是我为一个实例的每个变量获得的结果。
CURRENT = Current Object
NEXT = Next Object
contacts.count = 1114
self.id = 3533 #This is CURRENT.id
place_in_query = 36
contacts[place_in_query] = NEXT
next_contact = CURRENT
我想念什么/我犯了什么愚蠢的错误?
答案
在您的功能中,联系人是QuerySet。实际的objets不在行中获取:
contacts = Model.objects.filter(owner=self.owner).order_by('-date')
因为您未使用all()
,one()
,first()
等功能。稍后会对其进行评估。这可能是您遇到问题的原因。
由于您需要在联系人列表中搜索ID并在该列表中查找下一个对象,我认为没有办法,只能获取所有联系人并使用经典的Python循环来查找您的对象。
@property
def next_object_url(self):
contacts = list(Model.objects.filter(owner=self.owner).order_by('-date').all())
for curr_contact, next_contact in zip(contacts[:-1], contacts[1:]):
if curr_contact.id == self.id:
return next_contact
else:
# not found
raise ContactNotFoundError(self.id)
另一个解决方案是更改数据库模型,以便在数据库级别添加上一个/下一个联系的概念…
以上是关于Django在查询集中找到项目并获得下一个的主要内容,如果未能解决你的问题,请参考以下文章