动态更新django中基于依赖字段的选择字段
django-dynamic-form-fields的Python项目详细描述
用法:
*`pip install django dynamic form fields`
*add`dynamic\u fields` to`installed\u apps`
*add to your form as a widget:
```
值:int):
choices=[]
item=model.objects.get(id=value)
})
return choices
class myform(forms.modelform):
class meta:
model=mymodel
fields=(“item”,“dependent\u item”)
widgets={
“dependent\u item”:dynamicchoiceswidget(
dependent\u field=”item,
model=item,
callback=get_item_choices,
no_value_disable=true,
include_empty_choice=true,
empty_choice_label=“请选择一个选项”,
)
}
````
*确保窗体媒体包含在视图的其他媒体中
要求:
*django 1.11+
*python 3.5+(使用3.6.2构建/测试)
*jquery(使用1.12.4构建/测试)
当依赖字段更改时,视图被注入到项目的urlpatterns中,urlpatterns是ajax回调的处理程序。当呈现
dynamicchoiceswidget模板时,它将各种
提供的值序列化为python虚线字符串发送到模板。
它使用标记中的html5数据属性将这些值传递给javascript,以便发送到视图,告诉它下一步要做什么。
“callback”被序列化为代码中方法的完整点路径,例如“app.form.my_form.get_choices”。当依赖字段的值
发生更改时,ajax会从上面调用具有相关信息
的视图,然后导入路径,获取从django的模型加载器提供的模型
类,然后使用类本身调用
方法,以及
依赖字段提供的值。回调方法的输出被序列化为json,返回给进行调用的javascript,它在选项上迭代并将选择框的选项重置为
提供的选项。
这些选项可以(理论上)链接到所需的任意多个字段。
它还应该(尽管未经测试)使用多个选择框。
*`pip install django dynamic form fields`
*add`dynamic\u fields` to`installed\u apps`
*add to your form as a widget:
```
值:int):
choices=[]
item=model.objects.get(id=value)
})
return choices
class myform(forms.modelform):
class meta:
model=mymodel
fields=(“item”,“dependent\u item”)
widgets={
“dependent\u item”:dynamicchoiceswidget(
dependent\u field=”item,
model=item,
callback=get_item_choices,
no_value_disable=true,
include_empty_choice=true,
empty_choice_label=“请选择一个选项”,
)
}
````
*确保窗体媒体包含在视图的其他媒体中
要求:
*django 1.11+
*python 3.5+(使用3.6.2构建/测试)
*jquery(使用1.12.4构建/测试)
当依赖字段更改时,视图被注入到项目的urlpatterns中,urlpatterns是ajax回调的处理程序。当呈现
dynamicchoiceswidget模板时,它将各种
提供的值序列化为python虚线字符串发送到模板。
它使用标记中的html5数据属性将这些值传递给javascript,以便发送到视图,告诉它下一步要做什么。
“callback”被序列化为代码中方法的完整点路径,例如“app.form.my_form.get_choices”。当依赖字段的值
发生更改时,ajax会从上面调用具有相关信息
的视图,然后导入路径,获取从django的模型加载器提供的模型
类,然后使用类本身调用
方法,以及
依赖字段提供的值。回调方法的输出被序列化为json,返回给进行调用的javascript,它在选项上迭代并将选择框的选项重置为
提供的选项。
这些选项可以(理论上)链接到所需的任意多个字段。
它还应该(尽管未经测试)使用多个选择框。