如何在Django Admin中实现多级联动选择
要实现Django Admin中的多级联动选择,需要使用django-smart-selects库。
以下是如何使用django-smart-selects库实现多级联动选择的步骤:
- 安装django-smart-selects库:
pip install django-smart-selects
- 在Django项目的settings.py文件中添加以下内容:
INSTALLED_APPS = [ #... 'smart_selects', ]
- 定义两个模型(假设一个城市有多个区,一个区有多个街道):
from django.db import models from smart_selects.db_fields import ChainedForeignKey class City(models.Model): name = models.CharField(max_length=100) class District(models.Model): city = models.ForeignKey(City, on_delete=models.CASCADE) name = models.CharField(max_length=100) class Street(models.Model): district = ChainedForeignKey( District, chained_field="city", chained_model_field="city", show_all=False, auto_choose=True ) name = models.CharField(max_length=100)
- 在Django Admin中注册Street模型,然后在admin.py文件中使用以下代码:
from django.contrib import admin from .models import City, District, Street from smart_selects.admin import ChainedSelectInlineMixin @admin.register(Street) class StreetAdmin(admin.ModelAdmin, ChainedSelectInlineMixin): chained_fk_name = "district" # 需要联动的外键字段名称 class DistrictInline(admin.TabularInline): model = District class CityAdmin(admin.ModelAdmin): inlines = [DistrictInline] admin.site.register(City, CityAdmin) admin.site.register(District)
上面的代码中,我们使用ChainedSelectInlineMixin混入类和chained_fk_name属性来声明需要联动的外键字段名称,然后定义了一个DistrictInline内联模型,并且在City模型的管理后台中添加了DistrictInline模型作为内联编辑器。
- 启动服务器并访问Django Admin中的街道模型编辑器,你将看到以下多级联动选择界面效果:
这个界面中,选择城市后,可以动态加载该城市下的区域,然后再动态加载区域下的街道。
以上就是使用django-smart-selects库实现Django Admin中的多级联动选择的全部步骤。
相关文章