这是我的模特
class Stockdata(models.Model):
quantity = models.PositiveIntegerField(null=True,blank=True)
rate = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
opening = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
stock_name = models.CharField(max_length=32)
我想做类似的事情:
opening = quantity * rate
在我的Django表单模板中。
我尝试了以下方法:
<script type="text/javascript">
$(document).ready(function() {
$('#id_Quantity').keyup(function() {
var a = $('#id_rate').val();
var b = $(this).val();
$('#id_opening').val(a * b);
});
});
</script>
但这并不是没有结果
我的模板:
<form method="POST">
<div class="form-group row">
<label class="col-lg-2 col-form-label">Stock Name<i class="material-icons" style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.stock_name.errors }}
{{ form.stock_name }}
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Quantity<i class="material-icons" style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.Quantity.errors }}
{{ form.Quantity }}
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Rate<i class="material-icons" style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.rate.errors }}
{{ form.rate }}
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Opening Balance<i class="material-icons" style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.opening.errors }}
{{ form.opening }}
</div>
</div>
</form>
有人对如何执行此操作有任何想法吗? 其实我对jquery非常陌生,因此有一些基本问题。 谢谢
答案 0 :(得分:1)
我建议不要在前端执行计算并将数据发布到后端(除非您需要向用户显示opening
的值)。
相反,您应该通过简单地覆盖opening
方法来计算保存在Stockdata
django模型中的save
值。如下所示。
class Stockdata(models.Model):
quantity = models.PositiveIntegerField(null=True,blank=True)
rate = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
opening = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
stock_name = models.CharField(max_length=32)
# you override the save method and calculate for opening
def save(self, *args, **kwargs):
self.opening = self.quantity * self.rate;
super(Stockdata, self).save(*args, **kwargs)
NB 如果您仍然需要在用户输入数量值和费率值时向用户显示期初值,则需要对脚本进行一些修改:
<script type="text/javascript">
$(document).ready(function() {
$('#id_Quantity').keyup(function() {
var rate = parseFloat($('#id_rate').val());
var quantity = parseInt($(this).val(), 10);
$('#id_opening').text(rate * quantity);
});
});
</script>
然后您的html部分将是:
<form method="POST">
<div class="form-group row">
<label class="col-lg-2 col-form-label">Stock Name<i class="material-icons"
style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.stock_name.errors }}
{{ form.stock_name }}
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Quantity<i class="material-icons"
style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.Quantity.errors }}
{{ form.Quantity }}
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Rate<i class="material-icons" style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
{{ form.rate.errors }}
{{ form.rate }}
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Opening Balance<i class="material-icons"
style="font-size:16px;color:red">*</i></label>
<div class="col-lg-10">
<!-- opening value will be displayed here -->
<label id="id_opening"></label>
</div>
</div>
</form>