django如何控制语句的执行顺序?

我的需求是这样的,我在页面A点击一个按钮。这个按钮的作用是把页面上的数据post到一个api地址B,与此同时跳转到页面C,我想在页面C显示我刚刚post过来的数据。
我在api视图里设计的是把这些数据保存到数据库的id为1的对象中。如果这个对象已经存在数据库中了,我就删掉这个对象,并新建一个id为1的对象,然后把post过来的数据存进去,以此达到我每次post都能够重置这行数据的目的,不然以前的数据会一直保留。
我的api视图里这样写的:

    elif request.method == 'POST':
    try:                                         #若数据库中已有记录则修改,否则新建
        data = Inheritinfo.objects.filter()[0]
    except IndexError:
        data = Inheritinfo(id=1)
    else:
        data.delete()
        data = Inheritinfo(id=1)
    serializer = InheritinfoSerializer(data, data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)

而在页面C的视图里,我要取出这个id为1的对象,根据里面的数据做一些处理,然后返回数据到页面C上:

def result(request):
inherit_list = []

info = Inheritinfo.objects.filter()[0]    #在这里报错了

inherit_list.append(info.bjcr_name)
inherit_list.append(info.po_name)

context={}
context["inherit_list"] = inherit_list
return render(request,"inherit-result.html",context)

而在取这条数据的时候报错Indexerror,应该是执行到这里的时候我在API视图里面把这条数据删掉,还没有新建,所以这里取不到。我需要刷新页面C后才正常显示。
我希望的顺序是:删掉这行数据--新建一行主键一样的数据--取出这行数据并渲染到页面C
而现在的顺序貌似是:删掉这行数据--取出这行数据--取不到而报错--新增这行数据

那么怎么才能达到我跳转到C的时候不报错,能够正常按我希望的顺序执行呢呢?

阅读 3.1k
2 个回答

谢谢各位的回答,我暂时这样解决了......:
def result(request):

try:
    info = Inheritinfo.objects.filter()[0]
except IndexError:
    return redirect(to='result')

别笑我,新手暂时只能这样解决了,以后会学习更好的处理方法的= =

你为什么不直接post到c页面,直接显示数据,而要把数据往数据库存呢?

def result(request):
    info = request.POST.get('info')
    return render(request,"inherit-result.html", {'info': info})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题