- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数,它在我的类 Image
中传递一个对象的 id
。我需要模型中下一个对象的id
。目前,我正在以效率最低的方式执行此操作,因为我需要获取所有对象来执行此操作。我当前的实现是:
def get_next_id(curr_id):
result = []
Image_list = Image.objects.all()
total = Image.objects.all().count()
for i in range(len(Image_list)):
result.append(Image_list[i].id)
index_curr = result.index(curr_id)
if index_curr == total:
new_index = 0
else:
new_index = index_curr + 1
return Image_list[new_index]
如果有人可以提供更好的方法,或者使这个方法更有效率,我将不胜感激。谢谢。
最佳答案
我建议这样:
def get_next_id(curr_id):
try:
ret = Image.objects.filter(id__gt=curr_id).order_by("id")[0:1].get().id
except Image.DoesNotExist:
ret = Image.objects.aggregate(Min("id"))['id__min']
return ret
这不会处理表为空的特殊情况,但是如果表为空,您首先就不应该有有效的 curr_id
。它也不能防止将无意义的值作为 curr_id
传递。
它的作用是获取第一个大于当前 ID 的 id。 [0:1]
切片将从数据库返回的数据限制为第一条记录:实际上是数据库而不是 Python 执行切片。如果没有比当前id大的id,则取最小的id。
回应您关于如何反向执行此操作的评论:
def get_prev_id(curr_id):
try:
ret = Image.objects.filter(id__lt=curr_id).order_by("-id")[0:1].get().id
except Image.DoesNotExist:
ret = Image.objects.aggregate(Max("id"))['id__max']
return ret
变化是:
使用id__lt
,并按-id
排序。
使用 Max
而不是 Min
进行聚合,并使用 id__max
键而不是 id__min
> 获取值。
关于django - 获取 Django 模型中下一个对象的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26504415/
前文链接: Spring复杂的BeanFactory继承体系该如何理解? ----上 Spring复杂的BeanFactory继承体系该如何理解? ----中 Spring IoC容器 Applica
我正在努力实现这个目标 | Div | |Div nav wrapper| | logo | |con
我正在尝试从下拉菜单中的链接进行模式启动。模态似乎启动了(网站变灰),但看不到。来自不在下拉列表中的常规链接的模式工作得很好。我愚弄了 jquery,但由于我是 jquery 的新手,所以没有任何结果
我是一名优秀的程序员,十分优秀!