Django Admin中can_delete_extra参数的作用是什么?
Django中
can_delete_extra参数的作用解析 问题背景
用户定义了如下模型:
# models.py class Person(models.Model): name = models.CharField(max_length=20) def __str__(self): return self.name class Email(models.Model): person = models.ForeignKey(Person, on_delete=models.CASCADE) email = models.EmailField() def __str__(self): return self.email
在Admin后台配置Inline关联时,分别尝试设置can_delete_extra=True和False:
# admin.py(设置can_delete_extra=True) class EmailInline(admin.TabularInline): model = Email can_delete_extra = True @admin.register(Person) class PersonAdmin(admin.ModelAdmin): inlines = (EmailInline,)
# admin.py(设置can_delete_extra=False) class EmailInline(admin.TabularInline): model = Email can_delete_extra = False @admin.register(Person) class PersonAdmin(admin.ModelAdmin): inlines = (EmailInline,)
发现修改页面中已存在的Email记录的**DELETE?**复选框完全没变化,但设置can_delete=False时,该复选框会被隐藏。因此想明确can_delete_extra参数的作用。
参数作用解析
can_delete_extra和can_delete是两个独立参数,作用场景完全不同:
1. can_delete的作用
控制已保存到数据库的关联对象的删除权限,针对的是那些已经存在的Email记录。设置can_delete=False时,这些已有记录对应的DELETE复选框会被隐藏,禁止删除已存数据。
2. can_delete_extra的作用
控制未保存的空Inline表单的删除权限,针对的是Admin页面默认展示的空输入行(用于快速添加新关联对象):
- 当
can_delete_extra=True(默认值):这些空表单会显示DELETE复选框,你可以勾选删除多余的空行; - 当
can_delete_extra=False:这些空表单不会显示DELETE复选框,无法删除默认展示的空行,只能填写内容或留空(提交时空表单会被自动忽略)。
关键区别
- 作用对象:
can_delete针对已存在的数据库记录,can_delete_extra针对未保存的空Inline表单 - 表现位置:
can_delete影响已有数据行的DELETE复选框,can_delete_extra仅影响空表单行的DELETE复选框
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

