下面是针对“django admin 后台实现三级联动的示例代码”的完整攻略和两条示例说明:
1. 确定需要实现级联的模型
首先需要在 Django 项目中确定需要实现级联的模型。比如,我们选取了一个三级分类模型,其中包括分类、子分类和子子分类。
2. 安装django-cascading-dropdown插件
接下来需要安装 django-cascading-dropdown 插件,这个插件可以方便地实现级联下拉框。可以使用 pip 直接在命令行中安装:
pip install django-cascading-dropdown
3. 创建三个模型以及Admin文件
在确定了需要实现级联的模型后,可以创建三个模型以及对应的 Admin 文件。首先是分类模型:
class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
然后是子分类模型:
class SubCategory(models.Model):
name = models.CharField(max_length=50)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.name
最后是子子分类模型:
class SubSubCategory(models.Model):
name = models.CharField(max_length=50)
sub_category = models.ForeignKey(SubCategory, on_delete=models.CASCADE)
def __str__(self):
return self.name
为每个模型创建相应的 Admin 文件如下:
from django.contrib import admin
from cascading_dropdown.admin import CascadingDropdownModelAdmin
from .models import Category, SubCategory, SubSubCategory
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
pass
@admin.register(SubCategory)
class SubCategoryAdmin(CascadingDropdownModelAdmin):
related_dropdown_filters = {
'category': ('name',),
}
@admin.register(SubSubCategory)
class SubSubCategoryAdmin(CascadingDropdownModelAdmin):
related_dropdown_filters = {
'sub_category': ('name', 'category'),
}
需要注意的是,在 SubCategoryAdmin 和 SubSubCategoryAdmin 中需要在类属性 related_dropdown_filters 中配置对应的级联关系。通过以上的配置,我们可以实现级联下拉菜单。
4. 示例1:一个级联下拉框
下面是一个级联下拉框的示例代码:
from django import forms
from cascading_dropdown.widgets import CascadingSelect
class CategorySelectForm(forms.Form):
category = forms.ModelChoiceField(
queryset=Category.objects.all(),
widget=CascadingSelect(
auto_choose=True,
chain_field='sub_category',
parent_field='category',
max_levels=1,
),
required=False,
)
sub_category = forms.ModelChoiceField(
queryset=SubCategory.objects.all(),
widget=CascadingSelect(
chain_field='subsub_category',
parent_field='sub_category',
max_levels=1,
),
required=False,
)
subsub_category = forms.ModelChoiceField(
queryset=SubSubCategory.objects.all(),
widget=CascadingSelect(
max_levels=1,
parent_field='subsub_category',
),
required=False,
)
以上代码中,我们使用了 CascadingSelect 作为 Widget,设置了 auto_choose=True,表示自动选中第一个子分类。并设置了 parent_field 和 chain_field,这是级联关系需要使用的属性。
5. 示例2:多级联下拉框
下面是一个多级联下拉框的示例代码:
from django import forms
from cascading_dropdown.fields import CascadingModelChoiceField
from cascading_dropdown.widgets import CascadingSelect
class CategorySelectForm(forms.Form):
category = CascadingModelChoiceField(
queryset=Category.objects.all(),
chain_field='sub_category',
max_levels=3,
widget=CascadingSelect(
auto_choose=True,
chain_field='sub_category',
parent_field='category',
max_levels=1,
),
required=False,
)
sub_category = CascadingModelChoiceField(
queryset=SubCategory.objects.all(),
chain_field='subsub_category',
max_levels=2,
widget=CascadingSelect(
auto_choose=True,
chain_field='subsub_category',
parent_field='sub_category',
max_levels=1,
),
required=False,
)
subsub_category = forms.ModelChoiceField(
queryset=SubSubCategory.objects.all(),
widget=CascadingSelect(
max_levels=1,
parent_field='subsub_category',
),
required=False,
)
以上代码中,我们使用了 CascadingModelChoiceField 作为 ChoiceField,替换了之前的 ModelChoiceField。chain_field 的值设置为 SubCategory、SubSubCategory,max_levels 的值设置为 3 和 2,表示需要遍历三层和两层分类。并且我们设置了 parent_field 和 chain_field 属性如之前所述,通过 CascadingSelect 控制级联关系的生成。
以上就是实现 Django admin 后台三级联动的示例代码攻略,希望可以帮您理解 Django 中的级联关系实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django admin 后台实现三级联动的示例代码 - Python技术站