与许多人一样,我想根据在另一个领域中选择的内容填充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' )
手动调用网址效果很好,它以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中修复内容的任何指示? 谢谢!
答案 0 :(得分:0)
让它在我的头上腌了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,我真的感到迷茫。因此,如果可以做同样的事情,对于像我这样的偶然编码器来说几乎是不可能的。