fieldsets
在 Django 中,fieldsets
是一种用于定制管理后台表单的选项。在 Django 的 ModelAdmin 类中,我们可以定义 fieldsets
属性,它是一个包含元组或列表对象的序列,每个元素都表示一个分组。每个分组由一个标题和一个包含字段名称的集合组成。
使用 fieldsets
可以将管理后台表单分为多个分组,并在每个分组中显示指定的字段,从而使得表单更加易于阅读和操作。例如,我们可以将一个包含大量字段的模型,分成多个 fieldsets,每个 fieldset 包含几个相关字段。这样做不仅方便了管理员查看和编辑数据,还能增强了用户体验。
下面是一个示例代码,演示了如何在 Django 中使用 fieldsets
:
from django.contrib import admin
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
fieldsets = [
('Personal info', {'fields': ['first_name', 'last_name', 'email']}),
('Address', {'fields': ['address', 'city', 'state', 'zip_code']}),
('Other info', {'fields': ['phone_number', 'date_of_birth']}),
]
admin.site.register(MyModel, MyModelAdmin)
在上面的代码中,我们定义了一个 MyModelAdmin
类,并设置了三个 fieldsets
:Personal info(个人信息)、Address(地址) 和 Other info(其它信息)。每个 fieldset 包含一些字段,以键值对的形式表示。在管理后台中,这些字段将按照顺序分组,并显示在相应的 fieldset 中。
add_fieldsets
add_fieldsets
是 Django 中 ModelAdmin 类的一个属性,用于定制管理后台添加新记录时的表单选项。它与 fieldsets
属性类似,不同之处在于它只适用于添加新记录时的表单。
add_fieldsets
允许我们指定哪些字段是在添加新记录时必填的,哪些字段是可选的。它也可以将字段分为不同的分组,以便更好地组织表单。例如,如果我们的模型有很多字段,但是只有一些字段在创建新记录时是必填的,我们可以通过定义 add_fieldsets
来确保这些必填字段不会被漏掉。
下面是一个示例代码,演示了如何在 Django 中使用 add_fieldsets
:
from django.contrib import admin
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
fieldsets = [
('Personal info', {'fields': ['first_name', 'last_name', 'email']}),
('Address', {'fields': ['address', 'city', 'state', 'zip_code']}),
('Other info', {'fields': ['phone_number', 'date_of_birth']}),
]
add_fieldsets = [
('Required Information', {
'classes': ('wide',),
'fields': ('first_name', 'last_name', 'email', 'password1', 'password2'),
}),
('Optional Information', {
'classes': ('wide',),
'fields': ('address', 'city', 'state', 'zip_code', 'phone_number', 'date_of_birth'),
}),
]
admin.site.register(MyModel, MyModelAdmin)
在上面的代码中,我们定义了一个 MyModelAdmin
类,并设置了两个 add_fieldsets
:Required Information(必填信息)和 Optional Information(可选信息)。在 Required Information 分组中,我们要求必须填写 first_name、last_name、email、password1 和 password2 这些字段。在 Optional Information 分组中,我们允许填写其它所有字段。注意,这里我们用到了 'wide'
类,它是一个 CSS 样式类,用于将表单元素水平排列。
通过定义 add_fieldsets,我们可以控制添加新记录表单的可编辑字段,从而增强了用户体验。