繁体   English   中英

在Django中,如何读取表格数据,执行操作然后存储在数据库中?

[英]In django,How to read form data, perform operation and then store in database?

这是我的模型:

class Expense(models.Model):   
     Item= models.CharField(max_length=100)
     description= models.CharField(max_length=1000)
     Amount=models.DecimalField(max_digits=18, decimal_places=2, default=0)
     date = models.DateField(default=date.today())
     category = models.ForeignKey(ExpenseCategory) # either expense or income

我想编写一个代码以从HTML表单上的textarea读取值,如下所示:

"Vegitable 10kg 100 Taxi 10kms 200 mobile  brothers 200  clothes 2shirts 1500.50"

然后将其拆分为不同的列表,因为(我已经为此编写了代码):

item=[vegitable,Taxi,mobile,clothes]
description = [10kg,10kms,brothes,2shirts]
amount=[100,200,200,1500.50]

现在,我想编写一个代码以将上面的列表(包含04条记录)以及日期和类别存储到上面的model(实际上是数据库)中。 数据库必须如下所示。

Item        description Amount    date     category
____________________________________________________
Vegitable    10kg        100    28/09/2014   expense
Taxi         10kms       200    28/09/2014   expense 
mobile       brothers    200    28/09/2014   expense
clothes      2shirts    1500.50 28/09/2014   expense

注意:此处日期为今天日期,类别为费用

经过适当的python格式化后,数据如下所示:

item=['vegitable','Taxi','mobile','clothes']
amount=[100,200,200,1500.50]
description = ['10kg','10kms','brothes','2shirts']

要根据您的模型重新排列数据:

import datetime
from decimal import Decimal as D

category = ExpenseCategory.objects.get(name='expense')

rows = map(lambda i,a,d: {'Item':i, 'Amount':D(a), 'description':d}, item, amount, description)

for row in rows:
    expense = Expense(**row)
    expense.category = category
    expense.date = datetime.datetime.now()
    expense.save()

更新:

集成取决于您的表单处理:

将数据格式放在Form.clean

class ExpensesForm(forms.Form):
    def clean(self):
        cleaned_data = super(ExpensesForm, self).clean()
        # Your code for splitting things up goes here
        cleaned_data['expenses'] = map(lambda i,a,d: {'Item':i, 'Amount':D(a), 'description':d}, item, amount, description)
        return cleaned_data

在您看来,您可能会做某事。 像这样:

def my_view(request):
    ...
    if form.is_valid()
        for row in form.cleaned_data['expenses']:
            expense = Expense(**row)
            expense.category = category
            expense.date = datetime.datetime.now()
            expense.save()
    ...
def save(self, *args, **kwargs):
    category = ExpenseCategory.objects.get(description='expense')
    # code for split
    str=self.description
    lis=str.split()
    description=lis[0::3]
    item=lis[1::3]
    amount=lis[2::3]


    rows = map(lambda d,a: {'description':d,'amount':D(a)}, description, amount )

    for row in rows:
        print("I am in start of for")
        expense = Expense(**row)
        expense.category = category
        expense.date = self.date
        print("%s %s %s %s" % (self.description, self.amount,self.category,self.date))
        print("%s %s %s %s" % (expense.description, expense.amount,expense.category,expense.date))
        expense.save()
        #super(Blog, self).save(*args, **kwargs) # Call the "real" save() method
        super(Expense, expense).save(*args, **kwargs) # Call the "real" save() method
        print("I am in end of for")

上面我在models.py中编写的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM