基于表单和数据库值的Django计算

2024-10-02 12:24:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我从django1.9和python-3.4.4开始这个项目。 我已经建立了一个应用程序来跟踪我的能源,水和天然气消耗。我开始这个项目是为了更好地了解django和python。在

我创建了一个有两个字段的表单。一个用于计数器类型,另一个用于值。 现在我想从数据库中获取最新的值并进行简单的计算。在

delta = value_db - value_form

模型.py

^{pr2}$

表单.py

class DatenForm(forms.ModelForm):
    class Meta:
        model = Daten
        fields = ['Verbraucher', 'Stand']

视图.py

def dateneingabe(request):
    if request.method == "GET":
        form = DatenForm()
        return render(request, 'verbrauch/eingabe.html', {'form': form})
    elif request.method == "POST":
        form = DatenForm(request.POST)
        model = Daten()
        if form.is_valid():
            instance = form.save(commit=False)
            Stand_db = Daten.objects.lastest(Verbraucher)
            instance.Verbrauch = do_calc(Stand - Stand_db)
            instance.save()
            return HttpResponseRedirect('/')

我试过各种方法,但似乎都不管用。 我希望有人有个主意来帮我! 前面非常感谢!在

编辑:

它背后的全部想法是有一个本地网站,你有一个小形式的两个领域。一个表示计数器的类型,另一个表示它今天的值。 然后我想从这个计数器的数据库中得到最新的值并减去bot。然后,应将计算值插入db中。 我希望这有帮助?!在

编辑2:

我弹了一点,发现了一个错误。 我明白了,如果我想计算的话。 unsupported operand type(s) for -: 'decimal.Decimal' and 'Daten' 奇怪的是,我在我的模型文件中都定义了小数。。。 这是密码(视图.py在form=DatenForm之后(请求.POST)): if form.is_valid(): instance = form.save(commit=False) Stand = form.cleaned_data['Stand'] print(Stand) Stand_db = Daten.objects.latest('Stand') print(Stand_db) Verbrauch = (Stand - Stand_db) print(Verbrauch) instance.save()


Tags: 项目instancepyformdbifrequestsave
2条回答

非常感谢大家的支持和想法! 我已经设法解决了我的问题:

if form.is_valid():
            instance = form.save(commit=False)
            Verbraucher_form = form.cleaned_data['Verbraucher']
            Stand_form = form.cleaned_data['Stand']
            Stand_db = Daten.objects.filter(Verbraucher=Verbraucher_form).values('Stand').order_by('-Stand')[0]
            Stand_db2 = decimal.Decimal(Stand_db['Stand'])
            instance.Verbrauch = (Stand_form - Stand_db2)
            instance.save()

Stand_db给出字典中所选计数器的最后一个十进制值。 为了得到实际值,我必须把键和名称分开。 Stand\u db2正在这样做。在

最后我做了计算并保存了记录。在

首先,安排你的观点是不好的,虽然它会工作。已验证的表单数据将在form.cleaned_data字典中。这些数据已经被很好地转换为Python类型。IntegerField、DecimalField和FloatField等字段将值分别转换为Python int、Decimal和float。在

from yourapp.model import Daten

def dateneingabe(request):
    if request.method == "POST":
        form = DatenForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            Stand_db = Daten.objects.lastest(Verbraucher)
            #you used Stand instead of instance.stand and since instance.stand is decimalfield is will be processed nicely 
            instance.Verbrauch = do_calc(instance.Stand - float(Stand_db))
            instance.save()
            return HttpResponseRedirect('/')
    else:
        form = DatenForm()
    return render(request, 'verbrauch/eingabe.html', {'form': form})

我希望它能帮上忙

相关问题 更多 >

    热门问题