【问题标题】:How to update value of a model in views.py?如何更新views.py中模型的值?
【发布时间】:2020-07-01 22:09:48
【问题描述】:

早安各位,

我是 django 新手,想问你以下问题。

我在models.py中有两个类:

class Single_Income(models.Model):

  income_label = models.CharField(max_length=100, editable=True)

  income_jan = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
  income_feb= MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)



class Total_Income(models.Model):

  total_jan = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
  total_feb= MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)

在视图中我有以下代码:

def ricavi_dalle_vendite(request):
    items = Single_Income.objects.all()
    if request.method == 'POST':
         form = SingleIncomeModelForm(request.POST)
         if form.is_valid():
             print("Il form è valido")
             new_input = form.save()

    else :
        form = SingleIncomeModelForm()

    context= {
        "form": form,
        'items': items,
            }
    return render(request, "app/income.html", context) 

因此,在 web_application(url “app/income.html”)中填写表格,就可以填写 Single_Income。现在我想以这种方式自动填充 Total_Income 模型(在保存 Single_Income 模型数据之后):

单身收入:


|____一月____|___工厂_____|

|____100___|_____100____|

|____100____|____100____|

总收入:


|____200____|____200____|

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-templates


    【解决方案1】:

    您可以通过调用Total_Income 来创建Total_Income 的实例。举个例子:

    from . models import Total_Income, Single_Income
    from django.db.models import Sum
    
    def ricavi_dalle_vendite(request):
        items = Single_Income.objects.all()
    
        if request.method == 'POST':
             form = SingleIncomeModelForm(request.POST)
             if form.is_valid():
                 print("Il form è valido")
                 new_input = form.save()
    
                 # get sums of income_jan and income_feb for all records in Single_Income
                 data_jan = Single_Income.objects.aggregate(Sum('income_jan'))
                 data_feb = Single_Income.objects.aggregate(Sum('income_feb'))
                 jan = data_jan['income_jan__sum']
                 feb = data_jan['income_feb__sum']
    
                 # or, sum the incomes from the form
                 data_jan = new_input.aggregate(Sum('income_jan'))
                 data_feb = new_input.aggregate(Sum('income_feb'))
                 jan = data_jan['income_jan__sum']
                 feb = data_jan['income_feb__sum'] 
    
                 # create a Total_Income instance
                 total_income = Total_Income(total_jan=jan, total_feb=feb)
                 # you must save the instance after creating it if you want it to persist
                 total_income.save() 
    
                 context= {
                   "form": form,
                   'items': items,
                   'total_income': total_income
                 }
    
        return render(request, "app/income.html", context) 
    
    

    现在您可以在模板中访问 total_income,就像访问 items 一样。

    【讨论】:

    • 感谢您的回答@anowlinorbit。问题是我的 Single_Income.objects.value 是用户在表单模型中给出的。我不知道它们的价值。第二个问题是我的总收入必须是 Single_Income 月实例的总和。
    • 啊,我明白了。所以你想在表单中输入单个收入值,然后在不发布请求的情况下显示总收入?我对你的理解正确吗?如果是这种情况,那么您将不得不使用一些 Javascript。它应该很简单。您可以将 JS 添加到模板中。然后,当您使用单个收入值处理传入的 POST 请求时,您可以计算总收入值并创建一个 Total_Income 实例。
    • 我想我知道你在问什么。我误读了你写的东西。给我几分钟,我会在我给出的答案中发布一些内容。
    • 哦,谢谢。请耐心解释一下,因为我不擅长 java :)
    • 我已经更新了python代码。这将计算income_jan、income_feb 的总和。我展示了两个选项,一个用于计算所有 Single_Income 数据的总计,另一个仅从表单上的数据计算总计。请记住,您必须发布请求才能从 Django 获取此信息。如果您想在浏览器中动态执行此操作,并且不将数据发送到 Django,则需要 Javascript。
    猜你喜欢
    • 2020-08-11
    • 2019-06-22
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多