我有这个问题。我有一个基于此模型的ModelForm调用FacturaForm:
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()
所以现在我有了包含其字段的表单,以便用户可以完成它们。但我有一个问题。有一个表单字段调用" importe_sin_iva",这是用户要输入的数字,但也有字段调用" iva",这个字段应该计算一个数字做(" importe_sin_iva" * 0.21)以及用户WANTS在" importe_sin_iva"上编写数字的内容。字段和sistem自动计算乘法的结果并用它填充框。而且还有" importe_Total"必须做类似的事情的字段,但这次它必须添加(+)" importe_sin_iva" +" iva"字段并使用结果填充此框
我的问题是:在django表格上有没有正确的方法?或者可以用javascript完成吗?如果它必须在javascript中完成,任何人都可以给我一个如何做这样的事情的提示,因为我从未接触过javascript。
如果您认为我应该更改模型,请告诉我。
如果您有任何其他解决方案,我们将不胜感激。
谢谢。
答案 0 :(得分:1)
如果您想在填写表单时向用户显示值,则需要使用JavaScript。至少我不知道任何其他客户端技术来做到这一点。这里真正的大问题是将数据持久化到数据库。您无法依赖客户端将正确的值保存在数据库中。为此,您可以覆盖模型的save方法。这是一个简单的例子:
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)
});
这也是一个简单的例子,其中importe_sin_iva,iva和importe_Total的输入字段分别具有ID importe_sin_iva,iva和total。 iva和total字段不应该持久保存到数据库中。您不能依赖客户端技术来验证值。
你仍然需要学习如何使用jQuery,如何将它绑定到HTML等等。我希望这些简单的例子可以指明你的方式。