Python 使用django应用程序中JSON链接的数据创建动态html选择下拉列表

Python 使用django应用程序中JSON链接的数据创建动态html选择下拉列表,python,jquery,html,json,django,Python,Jquery,Html,Json,Django,我想使用来自DJANGO模型的JSON url的数据创建一个动态html表单选择下拉列表 动态,用户无需刷新页面即可从json url获取最后更改 例如,如果其他用户在django表中添加了新条目,则该下拉列表将自动更新,而无需进行任何更改 刷新页面 但在我的代码中,用户需要刷新页面才能获得最后的更改 你知道谁应该避免刷新页面来获取数据吗 代码如下: views.py def test_json(request): response_data=serialize('json',andre

我想使用来自DJANGO模型的JSON url的数据创建一个动态html表单选择下拉列表 动态,用户无需刷新页面即可从json url获取最后更改

例如,如果其他用户在django表中添加了新条目,则该下拉列表将自动更新,而无需进行任何更改 刷新页面

但在我的代码中,用户需要刷新页面才能获得最后的更改

你知道谁应该避免刷新页面来获取数据吗

代码如下:

views.py

def test_json(request):
    response_data=serialize('json',andress.objects.all())
    return HttpResponse(response_data,content_type='json')
网址:

json链接:

[
{
model: "log.mymodel",
pk: 3,
fields: {
f1: "some vasa",
f2: "some vadada",
f3: "some vsasa",
}
},
{
model: "log.mymodel",
pk: 4,
fields: {
f1: " some v1",
f2: "some v2",
f3: "some v3",
}
}
]
html页面:

<select id="locality-dropdown" name="locality">
</select>

<script>
let dropdown = document.getElementById('locality-dropdown');
dropdown.length = 0;
let defaultOption = document.createElement('option');
defaultOption.text = 'Choose State/Province';
dropdown.add(defaultOption);
dropdown.selectedIndex = 0;
const url = 'http://127.0.0.1:8000/test_data/';
const request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = function() {
  if (request.status === 200) {
    const data = JSON.parse(request.responseText);
    let option;
    for (let i = 0; i < data.length; i++) {
      option = document.createElement('option');
      option.text = data[i].pk;
      option.value = data[i].pk;
      dropdown.add(option);
    }
   } else {
    // Reached the server, but it returned an error
  }   
}
request.onerror = function() {
  console.error('An error occurred fetching the JSON from ' + url);
};
request.send();
</script>

let dropdown=document.getElementById('locality-dropdown');
dropdown.length=0;
让defaultOption=document.createElement('option');
defaultOption.text='选择州/省';
添加(默认选项);
dropdown.selectedIndex=0;
常量url=http://127.0.0.1:8000/test_data/';
const request=new XMLHttpRequest();
打开('GET',url,true);
request.onload=函数(){
如果(request.status==200){
const data=JSON.parse(request.responseText);
让选择权;
for(设i=0;i
我刚刚在几个地方使用from django-select2实现了这一点。因为对服务器的JSON请求是在用户在select元素中键入时发生的,所以这些请求总是使用最新版本的JSON视图

您可以将视图更新为,然后在带有ModelSelect2Widget的表单中使用它:

from django_select2.forms import ModelSelect2Widget

class MyForm(forms.Form):
    my_field = forms.ChoiceField(
        widget=ModelSelect2Widget(
            data_url='test_json'  # this is a URL name that gets resolved
        )
    )

您需要经常检查任何更新,您可以使用javascript
setInterval
每隔X分钟进行一次ajax调用:@Pedro在我的脚本中放置该函数的正确位置是哪里?setInterval(函数(){//jQuery ajax代码},1000*60*X);//其中X是每X分钟一次,我会首先将JavaScript代码放入一个函数中,以便可以多次调用它。然后在函数调用的地方显示
//您的jQuery ajax代码
@Pedro谢谢您的setInterval工作,但我不确定我是否喜欢它,因为如果我使用小x分钟随时更新值close/open againdo您的意思是所选选项未被选中?这可以用几行代码来解决。这是我第一次看到这个包,但是在data\u url='test\u json'how字段keep中?你能给我一个完整的示例,并附上我的帖子代码吗?谢谢
from django_select2.forms import ModelSelect2Widget

class MyForm(forms.Form):
    my_field = forms.ChoiceField(
        widget=ModelSelect2Widget(
            data_url='test_json'  # this is a URL name that gets resolved
        )
    )