Django视图中的值总和

4ktjp1zp  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(116)

我打算查询一个值,然后在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)
lsmepo6l

lsmepo6l1#

updated:values()返回一个行为类似于dict的查询集。简单地尝试

=conta1['contar'] + 1
or
=conta[0]['contar']

调试print(conta),您将看到
请在以后的帖子中添加错误跟踪

z9gpfhce

z9gpfhce2#

您可以确定最大值contar,然后将其递增1,如下所示:

from django.db.models import Max

def atualizar(request, contador):
    lista = factura.objects.filter(contador__contador=contador)
    conta = lista.aggregate(max_contar=Max('contar'))['max_contar'] or 0
    cont = get_object_or_404(cliente, contador=contador)
    if request.method == 'POST':
        data1 = request.POST['data1']
        factura_nr = request.POST['factura_nr']
        data2 = request.POST['data2']
        consumo = request.POST['consumo']
        dados = factura.objects.create(
            contador=cont,
            contar=conta + 1,  # to incremet here
            consumo=consumo,
            data1=data1,
            data2=data2,
            factura_nr=factura_nr,
        )
        return redirect('name-of-some-view')

    return render(
        request, 'tabela.html', {'lista': lista, 'cont': cont, 'conta': conta}
    )

注意:Django中的模型是用 PascalCase 编写的,而不是 snake_case,所以你可能想把模型从factura重命名为Factura
注意:最好使用Form [Django-doc],而不是手动进行数据校验和清洗。Form不仅可以简化HTML中表单的渲染,还可以更方便地验证输入,并将数据清理为更方便的类型。
注意:通常使用**get_object_or_404(…)[Django-doc]比直接使用.get(…)[Django-doc]更好。如果对象不存在,例如因为用户自己更改了URL,则get_object_or_404(…)将导致返回 HTTP 404 Not Found 响应,而使用.get(…)将导致 HTTP 500 Server Error
注意:如果POST请求成功,需要创建
redirect**[Django-doc]来实现Post/Redirect/Get pattern [wiki]。这样可以避免在用户刷新浏览器时发出相同的POST请求。

相关问题