Django:根据以前的字段值填充字段 - 缺少使其工作的最后一步



像许多人一样,我想根据在另一个字段中选择的内容以django形式填充一个字段。 我已经阅读了很多 javascript 的答案(我在 javscript 中挣扎,所以这就是我在示例方面遇到问题的地方(,我几乎让它工作了,但最后一步(更新字段本身(不起作用,所以我希望得到一些帮助。

以下是 2 个字段。第一个字段从查询填充,位于表单中名为 #merch 的div 中

merchandise = forms.ModelChoiceField(label='Merchandise', queryset=Merchandise.objects.all(),
merch_price =  forms.DecimalField(label='Price', min_value=0, max_value=800,
initial='0.00',decimal_places = 2, max_digits=10) 

选择后,第二个字段(名为 #price 的div(应根据所选商品显示价格。 我为 ajax 请求创建了视图:

def check_item_price(request):
if request.method == "GET":
item = request.GET.get('item', '0')#the zero as default doesn't seem to work. To verify
price = Merchandise.objects.get(id = item)      
return JsonResponse(price.item_price, safe=False)#is it safe to turn safe off?

和网址

url(r'^_item_price', views.check_item_price, name='_item_price' )

手动调用 url 效果很好,它以 json 格式返回价格

这是 html 形式的 JavaScript。 第一部分有效,更改后它调用 url 并返回 json 对象,但应更新第二个字段的第二部分不起作用。 我承认我缺乏JavaScript知识可能是这里的错。 我根据示例尝试了许多变体,但没有一种对我有用。

<script type="text/javascript">
jQuery(document).ready(function() {
$('#merch').change(function() {
var item = $(this).find(':selected').val();

$.getJSON('/classes/_item_price/',{item:item}, 
function(data) {
$('#price').append("<option value=" + data.value + "></option>");
});
});
});
</script>

关于在javascript中修复什么的任何指示? 谢谢!

让它在我脑海中腌制了 2 个月后,我又回到了它,终于让它工作了。 这是正确的代码

jQuery(document).ready(function() {
$('#merch').change(function() {
var item = $(this).find(':selected').val();
$.getJSON('/classes/_item_price/',{item:item}, 
function(data) {
document.getElementById('id_merch_price').value=data;
});
});
});
</script>

首先,ID不够精确,而且更新它的方式似乎也不对。 每当我必须研究javascript或jquery时,我真的感到迷茫。 所以可以做同样的事情的方法,对于像我这样的休闲程序员来说几乎不可能学习。

最新更新