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

时间:2017-07-20 22:09:39

标签: javascript jquery django django-forms

与许多人一样,我想根据在另一个领域中选择的内容填充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中修复内容的任何指示? 谢谢!

1 个答案:

答案 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,我真的感到迷茫。因此,如果可以做同样的事情,对于像我这样的偶然编码器来说几乎是不可能的。