如何在Django Admin中实现多级联动选择

2023-04-11 00:00:00 选择 如何在 联动

要实现Django Admin中的多级联动选择,需要使用django-smart-selects库。

以下是如何使用django-smart-selects库实现多级联动选择的步骤:

  1. 安装django-smart-selects库:
pip install django-smart-selects
  1. 在Django项目的settings.py文件中添加以下内容:
INSTALLED_APPS = [
    #...
    'smart_selects',
]
  1. 定义两个模型(假设一个城市有多个区,一个区有多个街道):
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)
  1. 在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模型作为内联编辑器。

  1. 启动服务器并访问Django Admin中的街道模型编辑器,你将看到以下多级联动选择界面效果:

这个界面中,选择城市后,可以动态加载该城市下的区域,然后再动态加载区域下的街道。

以上就是使用django-smart-selects库实现Django Admin中的多级联动选择的全部步骤。

相关文章