我们说我们有一个项目清单。并且,我们希望允许用户通过单击(向下箭头)来降低第一级的顺序来控制他们的订单。并且,同样将订单设置为更高一级。
views.py
def item_up(request, item_id):
item = get_object_or_404(Item, id=item_id)
swap_order = item.order - 1
swap = get_object_or_404(Item, order=swap_order)
item.order += 1000
item.save()
swap.order += 1
item.order -= 1001
swap.save()
item.save()
return redirect(request.META['HTTP_REFERER'])
def item_down(request, item_id):
item = get_object_or_404(Item, id=item_id)
swap_order = item.order + 1
swap = get_object_or_404(Item, order=swap_order)
item.order -= 1000
item.save()
swap.order -= 1
item.order += 1001
swap.save()
item.save()
return redirect(request.META['HTTP_REFERER'])
这种方式有效,除非我只有两个项目,它会显示错误。
No Item matches the given query.
任何想法?
答案 0 :(得分:0)
您可能正在传递数据库中不存在的ID,或者swap_order的逻辑错误。
当对象不存在(或未找到)时,会引发此消息错误。
https://docs.djangoproject.com/en/1.11/_modules/django/shortcuts/#get_object_or_404
答案 1 :(得分:0)
尝试:
def item_up(request, item_id):
item = Item.objects.get(id=item_id)
swap_order = item.order - 1
if Item.objects.filter(order=swap_order).exists:
swap = Item.objects.get(order=swap_order)
item.order += 1000
item.save()
swap.order += 1
item.order -= 1001
swap.save()
item.save()
return redirect(request.META['HTTP_REFERER'])
def item_down(request, item_id):
item = Item.objects.get(id=item_id)
swap_order = item.order + 1
if Item.objects.filter(order=swap_order).exists:
swap = Item.objects.get(order=swap_order)
item.order -= 1000
item.save()
swap.order -= 1
item.order += 1001
swap.save()
item.save()
return redirect(request.META['HTTP_REFERER'])