如何检查请求的数据是否存在

时间:2019-06-25 11:00:49

标签: python django

我对数据支持有疑问。我传入了模板的不同名称的变量。当我发送一个变量时,出现错误:异常类型:MultiValueDictKeyError。

我发送以查看名为btndeleteundo的变量。

我以这种方式完成了

try:
       task = List.objects.get(id=data['undo'])
   except:
       try:
           task = List.objects.get(id=data['delete'])
       except.....

那工作正常,但要更好地做到这一点我面临挑战。

有我的看法

def index(request):
    if request.method == 'POST':
        data = request.POST
        type_of = request.POST.get('type')
        if data['description']:
            new_task = List()
            new_task.create_task(data['title'], data['description'], type_of)
        else:
            return render(request, './index.html', {'context': "error: field cannot be empty"})
    if request.method == 'GET':
        data = request.GET
        try:
            task = List.objects.get(id=data['btn'])
            for x in task_status:
                if task.type_of == task_status[x]:
                    task.type_of = task_status[x + 1]
                    break
            task.save()
        except:
            try:
                task = List.objects.get(id=data['delete'])
                task.delete()
            except:
                try:
                    task = List.objects.get(id=data['undo'])
                    for x in task_status:
                        if task.type_of == task_status[x]:
                            task.type_of = task_status[x - 1]
                            break
                    task.save()
                except:
                    task_list_back_log, task_list_to_do, task_list_in_progress, task_list_done = return_filter_lists()
                    return render(request, './index.html',
                                  {'back_log': task_list_back_log, 'to_do': task_list_to_do,
                                   'in_progress': task_list_in_progress,
                                   'done': task_list_done})

但是当我删除try-except块并仅以查看data['undo']为例时出现错误

  

异常值:“ btn”

问题是,当我第一次加载模板时,我的数据查询为空... 有什么方法可以检查视图中存在哪个变量并使用它?

2 个答案:

答案 0 :(得分:0)

List.objects.filter(id=data['undo']).exists()

根据查询是否找到内容,将返回True或False。

如果该问题涉及检查数据['undo']是否存在,则:

if 'undo' in data:
  do_some_magic()

会的。

答案 1 :(得分:0)

 task = List.objects.filter(id=data['undo']).first()

返回第一条记录