我打算进行查询以获取一个值,然后在 Django 视图中将该值添加到 1,但是当我尝试这样做时,我总是会收到错误消息
def atualizar(request, contador): lista = factura.objects.filter(contador__contador=contador) conta1 = factura.objects.filter(contador__contador=contador).order_by('-contar')[:1] conta=conta1.values('contar') # this is value cont=cliente.objects.filter(contador=contador).first() if request.POST: data1=request.POST['data1'] factura_nr=request.POST['factura_nr'] data2=request.POST['data2'] consumo=request.POST['consumo'] dados = factura( contador=cont, contar= conta +1, # to incremet here consumo=consumo, data1=data1, data2=data2, factura_nr=factura_nr ) dados.save() return render(request, 'tabela.html', {'lista': lista,'cont':cont ,'conta':conta})[enter image description here](https://i.stack.imgur.com/BdaMk.png)
根据你提供的代码和错误消息,问题出现在这一行:
contar = conta + 1 # to increment here
在这里,你正在尝试将一个 QuerySet 对象(conta)和整数进行相加,这是不允许的,因为它们是不同的类型。你需要从 conta 中提取出实际的值,然后将其加1。
conta
你可以尝试使用 .get() 方法获取单个值,而不是 .values() 方法。.get() 方法将返回一个字典对象,你可以通过指定键来访问值。
.get()
.values()
在你的代码中,将这行:
conta = conta1.values('contar')
替换为:
conta = conta1.get().contar
这样,conta 变量将包含 contar 字段的实际值,而不是一个 QuerySet 对象。然后,你可以将其加1,如下所示:
contar
contar = conta + 1 # increment here
这样就可以将 contar 的增量值添加到 dados 对象中了。
dados
请注意,如果 conta1 QuerySet 为空,即没有匹配的记录,那么使用 .get() 方法将引发 DoesNotExist 异常。你可以根据需要进行错误处理,或者确保在调用 .get() 之前检查查询结果集是否为空。
conta1
DoesNotExist
以下是修改后的代码示例:
def atualizar(request, contador): lista = factura.objects.filter(contador__contador=contador) conta1 = factura.objects.filter(contador__contador=contador).order_by('-contar')[:1] if conta1.exists(): conta = conta1.get().contar contar = conta + 1 # increment here else: conta = None contar = 1 # initialize as 1 cont = cliente.objects.filter(contador=contador).first() if request.method == 'POST': data1 = request.POST['data1'] factura_nr = request.POST['factura_nr'] data2 = request.POST['data2'] consumo = request.POST['consumo'] dados = factura( contador=cont, contar=contar, consumo=consumo, data1=data1, data2=data2, factura_nr=factura_nr ) dados.save() return render(request, 'tabela.html', {'lista': lista, 'cont': cont, 'conta': conta})
这样修改后,你应该能够将查询结果中的值加1,并将其保存到数据库中。如果查询结果为空,那么 contar 将初始化为1。