Django | 一文简单搞懂Django中的fieldsets和add_fieldsets

文章目录

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,我们可以控制添加新记录表单的可编辑字段,从而增强了用户体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Admin ,你可以通过在模型管理定义 `fieldsets` 属性来调整字段集合的属性。`fieldsets` 属性允许你将表单字段分组显示,并可以更改字段的显示顺序和属性。在这个过程,你可以通过在 `fieldsets` 属性调整字段集合的属性来调整它们的外观和行为,例如: ```python from django.contrib import admin from .models import MyModel class MyModelAdmin(admin.ModelAdmin): fieldsets = ( ('Basic Information', { 'fields': ('name', 'description') }), ('Advanced Information', { 'classes': ('collapse',), 'fields': ('field1', 'field2', 'field3') }) ) # customize the appearance and behavior of the Advanced Information fieldset def get_advanced_information_fieldset(self, request, obj=None): return { 'classes': ('wide', 'extrapretty'), 'fields': ('field1', 'field2', 'field3'), 'description': 'Please fill out all fields before submitting.' } def get_fieldsets(self, request, obj=None): fieldsets = super().get_fieldsets(request, obj=obj) if obj is None: return fieldsets return ( fieldsets[0], (self.get_advanced_information_fieldset(request, obj)), ) admin.site.register(MyModel, MyModelAdmin) ``` 在这个示例,我们定义了一个 `get_advanced_information_fieldset` 方法,该方法返回自定义的 `Advanced Information` 字段集合属性,包括 `classes`、`fields` 和 `description`。我们还通过 `get_fieldsets` 方法将自定义的 `Advanced Information` 字段集合属性添加到 `fieldsets` 属性,并将其放在了默认的 `Basic Information` 字段集合之后。 需要注意的是,通过自定义 `get_fieldsets` 和 `get_advanced_information_fieldset` 方法,我们可以在 Django Admin 动态调整字段集合的属性,从而实现更加灵活的布局和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值