gpt4 book ai didi

javascript - [Django][Admin]change_form 使用 javascript 自动填充字段

转载 作者:行者123 更新时间:2023-11-28 09:11:13 30 4
gpt4 key购买 nike

我有点迷失,不知道如何继续,经过大量搜索后我认为我做得不对。

我的问题是我有一个像这样的优惠类模型:

class Offer(models.Model):
design_hours = models.IntegerField()
design_price = models.DecimalField(max_digits=10, decimal_places=2)
devel_hours = models.IntegerField()
devel_price = models.DecimalField(max_digits=10, decimal_places=2)

offer_price = models.DecimalField(max_digits=10, decimal_places=2)

其中 Offer_price 是计算字段(desig_hours * design_price + devel_hours * devel_price),我在覆盖保存方法时没有问题。

class OfferAdmin(VersionAdmin):
list_display = (
'design_hours',
'design_price',
'devel_hours',
'devel_price',
'offer_price')

我想要做的是在添加/更改表单中显示一个不可编辑的字段,该字段会在更改 design_hours 或 design_prices 表单字段时自动计算。

我想我必须覆盖change_form.html模板,但从这里我不知道该怎么做:(

谢谢

最佳答案

您确实需要将 offer_price 保存在数据库中吗?它总是可以从任何模型对象重新计算,因为所有必需的字段都在那里,并且可以保存为对象类的方法。

如果您决定确实需要将此字段保存在数据库中,那么您需要在 JavaScript 中添加某种事件逻辑,以便在其他输入发生更改时更新计算值。

您需要按照您的想法覆盖模板。首先,正常打印所有内容,然后您可以将 disabled 标记添加到 offer_price 输入字段(或者更好的是,创建一个不是输入的新项目,例如文本字段),然后在底部添加此脚本(假设 jQuery 已导入到您的模板中):

    // load jQuery
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
// when any input in this form changes, call recalculate price
$('#form_name input').on('change', reclaculate_price);

var reclaculate_price = function(){
// whatever your logic is for calculating the offer price
var value = $('#design_hours').val() * $('#design_price').val();
// Add some error checking here to ensure the price is valid
// Set the value to you field
$('#offer_price').val(value);
}
</script>

您需要将 id 字段名称更改为模板中适当的字段。

确保保存在数据库中的报价是在服务器端计算的,因为恶意用户可以通过将禁用开关翻转为启用来将他们想要的任何内容放入报价字段中(请参阅 this post )最好覆盖 ModelForm 并排除 Offer_price 字段。尽管希望您可以信任管理员中的用户,所以这可能不是必需的。

关于javascript - [Django][Admin]change_form 使用 javascript 自动填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306119/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com