小能豆

Django 视图中的值

python

我打算进行查询以获取一个值,然后在 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)

阅读 125

收藏
2023-06-12

共1个答案

小能豆

根据你提供的代码和错误消息,问题出现在这一行:

contar = conta + 1  # to increment here

在这里,你正在尝试将一个 QuerySet 对象(conta)和整数进行相加,这是不允许的,因为它们是不同的类型。你需要从 conta 中提取出实际的值,然后将其加1。

你可以尝试使用 .get() 方法获取单个值,而不是 .values() 方法。.get() 方法将返回一个字典对象,你可以通过指定键来访问值。

在你的代码中,将这行:

conta = conta1.values('contar')

替换为:

conta = conta1.get().contar

这样,conta 变量将包含 contar 字段的实际值,而不是一个 QuerySet 对象。然后,你可以将其加1,如下所示:

contar = conta + 1  # increment here

这样就可以将 contar 的增量值添加到 dados 对象中了。

请注意,如果 conta1 QuerySet 为空,即没有匹配的记录,那么使用 .get() 方法将引发 DoesNotExist 异常。你可以根据需要进行错误处理,或者确保在调用 .get() 之前检查查询结果集是否为空。

以下是修改后的代码示例:

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。

2023-06-12