【问题标题】:Passing data through from form submission depending on value根据值从表单提交传递数据
【发布时间】:2020-12-27 21:36:39
【问题描述】:

我正在尝试根据表单提交的不同计算从表单中传递数据

完整模型

    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 price_detail(request):

    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = PriceForm(request.POST)

        # check whether it's valid:
        if form.is_valid():
            form.save()

            return render(request,'confirmation.html',{'form_data': form.cleaned_data})
    else:
        form = PriceForm()


    return render(request, 'main.html', {'form': form})

所以想法是根据合同类型和开始日期更改confirmation.html页面上的显示详细信息,下面是一个基本但最不正确的示例:

def pricingcalc(request):
    if PriceForm.contract == 'year1'
        return Price.pricing * AdminData.day_rate_year1
    else
        return Price.pricing * AdminData.day_rate_year3

总结一下:

  • 在确认页面上列出值的输出
  • 输出基于天数 x 价格,具体取决于一年合同或三年合同。

希望这是有道理的。

感谢您的帮助。

【问题讨论】:

  • 也发布您的PriceForm 定义。我会帮你的。是ModelForm吗?然后您可以使用创建的实例。但在我们看到表格之前,这都是假设。
  • Modelform,已添加。

标签: django django-forms


【解决方案1】:

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

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

if form.is_valid():
    price_instance = form.save()

现在,如果您想为您的定价模型显示一些动态计算值,您可以在 Price 模型上添加一个基于 Price.contract 计算它们的方法。

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

【讨论】:

  • 谢谢,这是有道理的,会做更多的研究。
  • 我不明白如何在模型中设置方法来计算价格,我找不到正确的方法:if self.contract == year_choice('year1')
  • if self.contract == year_choice[0][0]。我建议查看 model_utils 包和 Choices 类:)
  • Alex 我仍然无法弄清楚如何将值传递到确认页面,也无法弄清楚如何在模型中进行计算。在过去的 6 个小时里,我一直在寻找,我的头很痛:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2020-11-30
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多