Django:使用模板中的ajax调用更新模型字段

时间:2017-11-29 08:22:49

标签: python ajax django

我有一个模特:

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个字段:名称,项目,故事用户手册输入。现在我想使用来自查询到mysql数据库的views函数的AJAX调用来填充关于第三个字段的最后两个字段。 我在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调用,因为他尚未提交表单。

请帮助。

1 个答案:

答案 0 :(得分:0)

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

<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>

您的视图与您已有的视图类似。喜欢 -

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

当然,您需要在模板中设置一些超时,以便每次用户按下按钮时都不会查询。

希望这有帮助。