int()参数必须是字符串,类似字节的对象或数字,而不是“ MaterialRequest”

时间:2019-09-19 05:36:38

标签: python django

我正在尝试访问查询集中的表单数据,并引发以下错误:

  

int()参数必须是字符串,类似字节的对象或数字,而不是'MaterialRequest'

Views.py

G

在打印语句中说s_o为1,但是我不能将其与查询中的ID等同? 我做错了什么,该如何解决?

这是回溯:

跟踪:

def form_valid (self, form):
    docket = form.save(commit=False)
    print("material request id is", form.cleaned_data['sales_order'])
    s_o = form.cleaned_data['sales_order']
    MaterialRequest.objects.filter(id=s_o).update(is_allocated = True)
    docket.save()
    messages.success(self.request, 'The Docket was created with success!')
    return redirect('employee:allotment-view')

1 个答案:

答案 0 :(得分:1)

您可以轻松地删除代码中的步骤之一,因为您正在接收MaterialRequest对象,因此无需再次查找它:

def form_valid (self, form):
docket = form.save(commit=False)
print("material request id is", form.cleaned_data['sales_order'])
s_o = form.cleaned_data['sales_order']
s_o.update(is_allocated = True)
docket.save()
messages.success(self.request, 'The Docket was created with success!')
return redirect('employee:allotment-view')

应该在不使用不需要的查询的情况下工作。 另外,我们应该假设id是主键,所以您应该使用get而不是filter,因为filter会给您查询集而不是单个对象。