【问题标题】:Django: Update model fields using ajax call from templateDjango:使用来自模板的 ajax 调用更新模型字段
【发布时间】:2017-11-29 08:22:49
【问题描述】:

我有一个模型:

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中有一个功能

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 调用,因为他还没有提交表单。

请帮忙。

【问题讨论】:

  • 能否详细说明您的实际需求?
  • 视图中的 ajax 调用是什么意思?
  • 我需要使用函数的第三个字段“story”作为输入对“get”函数进行 ajax 调用,这样我就可以使用它进行 mysql 查询
  • 您的意思是从模板到视图的 ajax 调用。对吗?
  • 我认为您已经在现有代码中做到了这一点。

标签: python ajax django


【解决方案1】:

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

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

当然,您可能希望在模板中设置一些超时时间,这样它就不会在每次用户按下按钮时进行查询。

希望这会有所帮助。

【讨论】:

  • 现在我开始关注 erro:: raise MultiValueDictKeyError(repr(key)) MultiValueDictKeyError: "u'third_value'"
  • 关注编辑后的帖子。实际上存储值的变量是value
  • 仍然收到相同的错误:val=request.GET["value"] 文件“/usr/lib64/python2.7/site-packages/django/utils/datastructures.py”,第 85 行,在 getitem 中引发 MultiValueDictKeyError(repr(key)) MultiValueDictKeyError: "u'value'"
  • 你能把request.GET的值打印在这里吗?
  • 它的
猜你喜欢
  • 2012-02-03
  • 2019-02-05
  • 2021-07-14
  • 2021-03-03
  • 2020-08-05
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多