gpt4 book ai didi

python - Django 在查询集中查找项目并获取下一个

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:22 24 4
gpt4 key购买 nike

我正在尝试获取一个对象,查找查询集,找到该查询集中的项目,然后找到下一个。

@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 。实际的对象未在行中获取:

contacts = Model.objects.filter(owner=self.owner).order_by('-date')

因为您没有使用像 list() 这样的函数,所以您还没有迭代 QuerySet...稍后会对其进行评估。这可能是您出现问题的原因。

由于您需要在联系人列表中搜索 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)

另一个解决方案是更改数据库模型,以便在数据库级别添加上一个/下一个联系人的概念......

关于python - Django 在查询集中查找项目并获取下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com