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

查看:186
本文介绍了python - 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的时候不报错,能够正常按我希望的顺序执行呢呢?

解决方案

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

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

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

这篇关于python - django如何控制语句的执行顺序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆