Django:使用来自模板的Ajax调用更新模型字段 [英] Django: Update model fields using ajax call from template

查看:45
本文介绍了Django:使用来自模板的Ajax调用更新模型字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个模特:

class ok(models.Model):
    name = models.CharField(max_length=255)
    project = models.CharField(max_length=255)
    story = models.CharField(max_length=500)
    depends_on = models.CharField(max_length=500, default='')
    rfc = models.CharField(max_length=255)

我有模型表格.

class okForm(ModelForm):
     class Meta:
     model = ok
     fields='__all__'

我正在获得前3个字段:名称,项目,故事用户手册.现在,我想使用AJAX从视图函数调用来填充相对于第三个字段的后两个字段,这将查询到mysql数据库.我对views.py有兴趣.

I am getting first 3 fields: name, project, story user manual entry. Now I want to populate the last two fields with respect to third field using AJAX call from views function that will query to mysql database. I have a fucntion in views.py

def get(self, request):
    name = request.GET.get('name')
    project = request.GET.get('project')
    story = request.GET.get('story')
    if name and project and story:
        try:
            obj = ok.objects.get(name=name, project=project, story=story)
            return JsonResponse(data={
                'depends_on': ok_obj.depends_on,
                'rfc': ok_obj.rfc}, status=200)
        except ok.DoesNotExist:
             pass
    return JsonResponse(data={'error': 'bad request'}, status=400) 

我将如何使用用户刚刚填写的第三个值进行ajax调用,因为他尚未提交表单.

How i will make the ajax call with the third value the user just filled, as he has not submitted the form yet .

请帮助.

推荐答案

如果我正确理解了您的问题,请在您的模板中执行-

If I understood your problem correctly, in your template, do -

<input type="text" onkeyup="get_value()" name="third_value" />

<script>
    function get_value(){
      var val=document.getElementsByName("third_value")[0].value;
      var xhr=new XMLHttpRequest();
      xhr.open("GET","get_value_url?value="+val,true);
      xhr.onreadystatechange=function(){
         if(xhr.readyState == 4 && xhr.status == 200){
            var res=JSON.parse(xhr.responseText);
            // do something with this response like autofill
         }
      }
      xhr.send(null);
}
</script>

视图的外观将与现有视图相似.喜欢-

Where as your view will look similar to what you already have. Like -

def get(request):
   val = request.GET["value"]
   # query your db and prepare response data
   return JsonResponse(response)

当然,您希望在模板中设置一些超时,以使它不会在用户每次按下按钮时查询.

Of course you would want to set some timeout in your template so that it does not query everytime user presses a button.

希望这会有所帮助.

这篇关于Django:使用来自模板的Ajax调用更新模型字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆