Django 根据值通过表单提交传递数据

Django 根据值通过表单提交传递数据,django,django-forms,Django,Django Forms,我试图通过表单传递数据,这取决于表单提交的不同计算 全套车型 from django.db import models from datetime import datetime, date # Create your models here. year_choice = [ ('year1','1-Year'), ('year3','3-Year') ] weeksinyear = 52 hours = 6.5 class AdminData(models.Mod

我试图通过表单传递数据,这取决于表单提交的不同计算

全套车型

    from django.db import models
from datetime import datetime, date

# Create your models here.

year_choice = [
    ('year1','1-Year'),
    ('year3','3-Year')
]
weeksinyear = 52
hours = 6.5

class AdminData(models.Model):
    year1 = models.IntegerField()
    year3 = models.IntegerField()

    @property
    def day_rate_year1(self):
        return self.year1 / weeksinyear / hours

    @property
    def day_rate_year3(self):
        return self.year3 / weeksinyear / hours


class Price(models.Model):
        name = models.CharField(max_length=100)
        contract = models.CharField(max_length=5, choices=year_choice)
        start_date = models.DateField(default=datetime.now)
        end_date = models.DateField(default=datetime(2021,3,31))
        epoch_year = date.today().year
        year_start = date(epoch_year, 1, 4)
        year_end = date(epoch_year, 3 , 31)


        def __str__(self):
            return self.name

        @property
        def pricing(self):
            price_days = self.start_date - self.year_end
            return price_days
视图

def价格详细信息(请求):
如果request.method==“POST”:
#创建表单实例并使用请求中的数据填充它:
表单=价格表单(request.POST)
#检查它是否有效:
如果form.is_有效():
form.save()
返回呈现(请求,'confirmation.html',{'form_data':form.cleaned_data})
其他:
form=PriceForm()
返回呈现(请求'main.html',{'form':form})
因此,我们的想法是根据合同类型和开始日期更改confirmation.html页面上的显示详细信息,下面是一个基本但最不正确的示例:

def pricingcalc(请求):
如果PriceForm.contract=='year1'
返回价格.pricing*AdminData.day\u费率\u年份1
其他的
返回价格.pricing*AdminData.day\u费率\u年份3
总结如下:

  • 在确认页面上列出值的输出
  • 基于天数x价格的输出取决于一年合同或三年合同
希望这是有意义的


感谢您的帮助。

如果我们在文档中查看模型表单是如何工作的(更准确地说),我们可以看到,一旦我们在
模型表单上调用
.save()
,我们就会得到该模型的一个实例

在您的情况下,我们可以假设如下:

如果form.is_有效():
price_instance=form.save()
现在,如果您想显示定价模型的一些动态计算值,可以在
价格
模型上添加一个基于
价格.合同
计算它们的方法


这里的重要思想是,一旦
ModelForm
被认为是
有效的
,并且您在其上调用
.save()
,这将在默认情况下提交数据库中的数据,并返回该模型的一个实例,您可以在以后使用。

如果我们在文档中查看模型表单的工作方式(更准确地说)我们可以看到,一旦我们在
ModelForm
上调用
.save()
,我们将得到该模型的一个实例

在您的情况下,我们可以假设如下:

如果form.is_有效():
price_instance=form.save()
现在,如果您想显示定价模型的一些动态计算值,可以在
价格
模型上添加一个基于
价格.合同
计算它们的方法


这里的重要思想是,一旦
ModelForm
被视为
有效
,并且您在其上调用
.save()
,这将默认提交数据库中的数据,并返回该模型的一个实例,您可以在以后使用。

发布您的
PriceForm
定义。这会有帮助的。它是一个
模型形式
?然后可以使用创建的实例。但是在我们看到表单之前,这些都是假设。Modelform,添加了它。也发布您的
PriceForm
定义。这会有帮助的。它是一个
模型形式
?然后可以使用创建的实例。但是,在我们看到表单之前,这些都是假设。Modelform,添加了它。谢谢你,这是有意义的,并且会对它做更多的研究。我不知道如何在模型中设置一个方法来计算价格,我找不到正确的方法:
如果self.contract==year\u choice('year1')
如果self.contract==year\u choice[0][0]
。我建议查看model_utils包和选项类:)Alex我仍然不知道如何将值传递到确认页面,也不知道如何在模型中进行计算。我花了6个小时寻找,我的头很痛:谢谢你,这是有道理的,我会做更多的研究。我不知道如何在模型中设置一个方法来计算价格,我找不到正确的方法:
如果self.contract==year\u choice('year1')
如果self.contract==year\u choice[0][0]
。我建议查看model_utils包和选项类:)Alex我仍然不知道如何将值传递到确认页面,也不知道如何在模型中进行计算。在过去的6个小时里,我一直在寻找,我的头很痛