2017-03-04 60 views
0
计算模型字段

我想问一个用户在一个CreateView中的单个字段中的单个数据,并从该字段计算剩余模型字段的值。

因此,我可以不问他们所有的数据,而只是要求一件事,然后计算其余的。

一个基本的例子:

Model.py

class EggCount(models.Model): 
    crates = models.IntegerField() 
    cartons = models.IntegerField() 
    eggs = models.IntegerField() 

Views.py

class EggCountCreateView(generic.CreateView): 
    model = models.EggCount 
    fields = ['crates'] 
    template_name = 'egg_form.html' 

相关的数学,我要用来填写 '纸箱' 和“鸡蛋'模型中的字段。

cartons = crates * 50 
eggs = cartons * 12 

这个数学在Django去哪里?在模型中?作为视图中form_valid函数的一部分?我应该保持它以某种方式分开从模型或视图中调用它吗?

对不起,但我完全失去了,很难找到明确的答案,为此最好的方法。

回答

0

您可以使用这样的隐藏表单域您egg_form.html

<input type="hidden" name="cartons" value=""> <input type="hidden" name="eggs" value="">

和使用JavaScript/jQuery来执行你的计算和存储结果的价值属性。

+0

感谢您的建议,凯文。我希望在这里严格使用Django/Python。为了清晰起见,这是我的真实代码的简化版本。真正的代码已经有几个已经在python中构建的公式,我想利用它。 – Dan

0

在没有看到代码的其余部分,我认为你需要做这样的事情,把你的数学函数的模型中,然后从视图中调用它们,然后做任何你需要与他们:

模型的.py

class EggCount(models.Model): 
    crates = models.IntegerField() 
    cartons = models.IntegerField() 
    eggs = models.IntegerField() 

    def cartons(self): 
     cartons = self.crates * 50 

    def eggs(self): 
     eggs = self.cartons * 12 

views.py

class EggCountCreateView(generic.CreateView): 
    model = models.EggCount 
    fields = ['crates'] 
    templates_name = 'egg_form.html' 
    # call the functions within the view 
    cartons = model.cartons() 
    eggs = model.eggs() 
    #then you can do something with the results 
+0

谢谢@ pasta1020。这是一个有趣的方法。我做了类似的事情,但不是添加到模型中,而是创建了一个包含方程的services.py文件,然后从视图的form_valid中调用该逻辑。我很乐意听取相反的观点,但为什么这是一个糟糕的做法。 – Dan