Django表单和javascript或者其他方式
Django forms and javascript or maybe some other way to do the same
我有一个问题。我有一个名为FacturaForm的ModelForm,它是基于这个模型的:
class Factura(models.Model):
TIPO_FACTURA = (
('A', 'A'),
('E', 'E')
)
RESPONSABLE = (
('Responsable Inscripto', 'Responsable Inscripto'),
('Responsable No Inscripto', 'Responsable No Inscripto')
)
tipo_Factura = models.CharField(max_length=1, choices= TIPO_FACTURA)
nombre_cliente = models.ForeignKey(Cliente)
fecha_factura = models.DateField()
RI = models.CharField(max_length=50, choices= RESPONSABLE)
numero_De_Factura = models.IntegerField(max_length=50)
descripcion = models.CharField(max_length=140)
importe_Total= models.FloatField()
iva = models.FloatField()
importe_sin_iva = models.FloatField()
所以现在我有了表单和它的字段,所以用户可以完成它们。但我有个问题。有一个名为"import_sin_iva"的表单字段,这是用户要输入一个数字,但也有一个名为"iva"的字段,这个字段应该计算一个数字("import_sin_iva"* 0.21),用户想要的是在"import_sin_iva"字段上写一个数字,系统会自动计算乘法的结果,并用它填充框。还有" importte_total "字段也要做类似的事情但这次要加上(+)" importte_sin_iva " + "iva"字段然后用结果
填满这个框我的问题是:是否有一个合适的方法来做这个django表单?或者可以用javascript完成?如果它必须在javascript中完成,谁能给我一个提示如何做这样的事情,因为我从来没有接触过javascript。
如果你认为我应该改变模型,请告诉我。
如果您有其他解决办法,我将不胜感激。
谢谢。
如果希望在用户填写表单时向他显示值,则需要JavaScript。至少我不知道有任何其他客户端技术可以做到这一点。这里真正的大问题是将数据持久化到数据库。您不能指望客户机将正确的值保存在数据库中。为此,您可以覆盖模型的保存方法。这是一个简单的例子:
def save(self, *args, **kwargs):
self.iva = self.importe_sin_iva * 0.21
self.importe_Total = self.iva + self.importe_sin_iva
super(Factura, self).save(*args, **kwargs)
在表单中,您可以使用事件'onchange'动态更新适当的字段。jQuery框架是理想的选择。你的函数可以像这样:
$('#importe_sin_iva').change(function() {
var importe_sin_iva = $(#importe_sin_iva).val()
var iva = importe_sin_iva * 0.21
$('#iva').val(iva)
var total = importe_sin_iva + iva
$('#total').val(total)
});
这也是一个简单的示例,其中import_sin_iva、iva和import_total的输入字段分别具有import_sin_iva、iva和total的id。字段iva和total不应该持久化到数据库中。您不能依赖于客户端技术来验证值。
你仍然需要学习如何使用jQuery,如何将它绑定到你的HTML,等等。
- 如何“;过滤器”;或者以其他方式重构该数据
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 将不同上传的文件显示为缩略图或任何其他方式
- 将DIV包裹在锚标签内或其他方式
- 如何使用cURL或其他方式在点击时执行事件
- 是否可以在JqGrid中按字母顺序以外的其他方式对组进行排序
- 如何使用 PHP 以外的其他方式解析 RSS 提要
- 使用 Curl 或其他方式检索完全呈现的页面
- 在循环或以其他方式动态创建 JSON 对象中的属性
- Javascript:与正则表达式或其他方式进行比较
- 角度重定向到其他方式而不检测视图,但当我单击后退按钮时它可以工作
- 将 HTML 表转换为下拉列表(或以其他方式获取带有列的选择标记)
- 运行javascript以外的其他方式:从url
- Packery - jquery show/hide有效,但不能以其他方式工作
- 聚合来自mongodb,map reduce或任何其他方式的数据
- 从链接打开窗口(模式或其他方式),并使用代码隐藏中的数据加载它
- 添加文本框或其他方式
- EXTJS 6.x到4.x以图形或其他方式查看组件的分层
- 获取浏览器信息的任何其他方式,而不是检索UserAgent
- chrome扩展无法使用内容脚本和其他方式从谷歌加载外部javascript