如何使用Ajax+基于Django模板中的另一个字段填充表单字段;jQuery

如何使用Ajax+基于Django模板中的另一个字段填充表单字段;jQuery,jquery,django,ajax,django-forms,django-templates,Jquery,Django,Ajax,Django Forms,Django Templates,我试图根据用户使用下拉菜单选择的产品填充度量单位字段。在我的产品模型中,每个产品都指定了一个度量单位,我正在尝试在订单创建期间自动填充“单位”字段 我使用jQuery获取产品,并捕获('change')上的事件。在我努力完成这个场景的过程中,我尝试使用这个示例代码 在本例中,我们检查用户输入的特定名称是否存在,或者是否使用发送到数据库的Ajax调用(我已经能够复制)。我无法理解的是,在选择“产品”时提取相关字段值“度量单位” 根据对产品的选择,向数据库发送Ajax调用以获取度量单位的关联值的正确

我试图根据用户使用下拉菜单选择的产品填充度量单位字段。在我的产品模型中,每个产品都指定了一个度量单位,我正在尝试在订单创建期间自动填充“单位”字段

我使用jQuery获取产品,并捕获('change')上的事件
。在我努力完成这个场景的过程中,我尝试使用这个示例代码

在本例中,我们检查用户输入的特定名称是否存在,或者是否使用发送到数据库的Ajax调用(我已经能够复制)。我无法理解的是,在选择“产品”时提取相关字段值“度量单位

根据对产品的选择,向数据库发送Ajax调用以获取度量单位的关联值的正确方法是什么

编辑

型号.py

class Product(models.Model):
    product_id = models.IntegerField(primary_key=True, default=300000000000000000)
    description = models.CharField(max_length=100, help_text='Prod.Short text')
    default_uom = models.ForeignKey(Unit_of_Measure, null=True, on_delete=models.CASCADE, verbose_name='UoM')

    def __str__(self):
        return '{0} : {1}'.format(self.product_id, self.description)
urlpatterns = [

    # ...
    path('ajax/uom/', fill_UoM, name='fill_unit_of_meas'),
    # ...
url.py

class Product(models.Model):
    product_id = models.IntegerField(primary_key=True, default=300000000000000000)
    description = models.CharField(max_length=100, help_text='Prod.Short text')
    default_uom = models.ForeignKey(Unit_of_Measure, null=True, on_delete=models.CASCADE, verbose_name='UoM')

    def __str__(self):
        return '{0} : {1}'.format(self.product_id, self.description)
urlpatterns = [

    # ...
    path('ajax/uom/', fill_UoM, name='fill_unit_of_meas'),
    # ...
注意:最初我将url路径包含在app root中,现在我已将其移动到项目根中

编辑2

注意:视图.py和HTML模板已修改并显示在下面(删除旧代码以便于阅读)

1。型号:“测量单位”

VIEWS.PY(已修改) HTML模板(已修改) 现在我没有收到任何错误,但也没有返回结果。顺便说一句,出于绝望,为了测试代码(views.py)是否正常工作,我尝试返回产品id的值,但它当然不正常

这是控制台。日志:

捕获的值为:物料默认计量单位

谢谢

ajax功能

function fillUoM() 
{
    $.ajax({
            url: '{% url 'fill_unit_of_meas' %}',
            data: {"product_id": matl_sel},       
            dataType: 'json',
            success: function(data) {console.log('The value captured is: ' + data.default_uom)},
            error: function(data) {console.log('Data could not be retrieved')}
        });
};
views.py

def fill_UoM(request):
    product_id = request.GET.get('product_id', None)
    data = {'default_uom': Product.objects.get(product_id=int(product_id)).default_uom.uom}
    return JsonResponse(data)     

显示与上述问题相关的模型、视图和html页面。@Amandepsinghsawhney更新了我的问题,使其包含代码。@您能同时添加度量单位模型吗?“那么我将最终回答你的问题。”AmandeepSinghSawhney对我的代码做了一些更改。我正在更新这些数据,同时也请添加度量单位模型。@Amandepsinghsawhney已经添加了UoM表并进行了修改以显示当前情况。谢谢。打个比方,它就像一把热刀穿过黄油!!非常感谢。如果我问你,你能澄清一件事吗:如果我从
data={'default\u uom':Product.objects.get(Product\u id=int(Product\u id)).default\u uom.uom}
中删除对FK模型“Unit\u of uu Measure”的引用,而改为使用
data={'default\u uom':Product.objects.get(Product\u id=int(Product\u id)).default uom}Product.objects.get(Product\u id=int(Product\u id)
将给出一个度量单位模型的对象,您正试图在json响应中发送该对象。这在django中不起作用。我建议您仔细检查以下问题:stackoverflow.com/q/16790375/10585627和stackoverflow.com/q/21925671/10585627。您提供的解决方案确实非常有用。不过,我需要澄清一下如果可以的话。Ajax解决方案与普通的
select
完美配合,但与Django autocomplete light配合使用时,它不起作用。可能有什么问题,我该如何解决?如果需要,我可以发布一个新问题。你可以发布一个新问题。如果其他人遇到同样的问题,他们会发现它很有用。如果可以,我会回答。ThanksNo问题。我正在探索。如果我发现了什么,我会发布它。谢谢。
def fill_UoM(request):
    product_id = request.GET.get('product_id', None)
    data = {'default_uom': Product.objects.get(product_id=int(product_id)).default_uom.uom}
    return JsonResponse(data)