级联选择(Cascader)是一种选择控件,以分组菜单的形式展示选项,通常包含两个或以上的层级。它适合于有逻辑顺序的场景,如“省、市、区”的选择。Django下django-smart-selects提供级联选择应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
使用场景:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
- 常用于单选,但也可以支持多选。
- 适用于选项之间存在明显的层级关系,如上下级关系或权限的包含关系。
- 与输入框配合使用,可以通过下拉菜单承载。
1.安装django-smart-selects文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.htmlpip install django-smart-selects
2.在settings.py的INSTALLED_APPS添加smart_selects文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
3.添加urls路由文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.htmlurlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^chaining/', include('smart_selects.urls')),
)
4.
链式选择示例应文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
models.py文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.htmlclass Continent(models.Model):
name = models.CharField(max_length=255)
class Country(models.Model):
continent = models.ForeignKey(Continent)
name = models.CharField(max_length=255)
class Location(models.Model):
continent = models.ForeignKey(Continent)
country = models.ForeignKey(Country)
area = models.ForeignKey(Area)
city = models.CharField(max_length=50)
street = models.CharField(max_length=100)
选择大洲Location后,如果只想该大洲上的国家/地区可用,则可以在模型上使用 ChainedForeignKey文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.htmlfrom smart_selects.db_fields import ChainedForeignKey
class Location(models.Model):
continent = models.ForeignKey(Continent)
country = ChainedForeignKey(
Country,
chained_field="continent",
chained_model_field="continent",
show_all=False,
auto_choose=True,
sort=True)
area = ForeignKey(Area)
city = models.CharField(max_length=50)
street = models.CharField(max_length=100)
ChainedForeignKey选项文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
- chained_field (必填)表示同一模型上应链接到的字段。示例是模型中字段的名称。
- chained_model_field(必填)表示与Model链接的模型相对应的链式模型的字段。示例Model中字段的名称。
- show_all(可选)指只显示筛选的结果,还是还想进一步显示其他结果。
- auto_choose(可选)是否在只有一个可用选项时自动选择选项。
- sort排序(可选)指是否应按字典对结果集进行排序。默认Model.ordering为True 。
5.链接 ManyToMany 选择示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
models.py文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.htmlfrom smart_selects.db_fields import ChainedManyToManyField
class Publication(models.Model):
name = models.CharField(max_length=255)
class Writer(models.Model):
name = models.CharField(max_length=255)
publications = models.ManyToManyField('Publication', blank=True, null=True)
class Book(models.Model):
publication = models.ForeignKey(Publication)
writer = ChainedManyToManyField(
Writer,
chained_field="publication",
chained_model_field="publications")
name = models.CharField(max_length=255)
from smart_selects.db_fields import ChainedManyToManyField
class Publication(models.Model):
name = models.CharField(max_length=255)
class Writer(models.Model):
name = models.CharField(max_length=255)
publications = models.ManyToManyField('Publication', blank=True, null=True)
class Book(models.Model):
publication = models.ForeignKey(Publication)
writer = ChainedManyToManyField(
Writer,
horizontal=True,
verbose_name='writer',
chained_field="publication",
chained_model_field="publications")
name = models.CharField(max_length=255)
ChainedManyToManyField 选项
chained_field(必填)表示同一模型上应链接到的字段。示例是模型中字段的名称。
chained_model_field(必填)表示与链接的模型相对应的链式模型的字段。示例是模型中字段的名称。
auto_choose(可选)指是否在只有一个可用选项时自动选择选项。
horizontal(可选)
混合 Django 的,以便在 Django 后台使用FilteredSelectMultiple文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
6.在模板中的使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html
在模板中,像往常一样继续使用 Django 表单或模型表单。只需包含在您的表格中即可。这将自动将以下 Javascript 文件添加到您的页面中:{{ form.media.js }}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html<script src="/static/smart-selects/admin/js/chainedfk.js"></script>
<script src="/static/smart-selects/admin/js/bindfields.js"></script>
下面是一个基本的用法示例:
<form method="post">
{% csrf_token %}
{{ form.media.js }}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
参考文档文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/63109.html项目github:https://github.com/jazzband/django-smart-selects
文档:https://django-smart-selects.readthedocs.io/en/latest/installation.html