详解
TabularInline
是 Django Admin 中的一个内联模型选项,用于在父模型的编辑页面中以表格形式显示关联的子模型对象。下面是对 TabularInline
的一些详解:
-
显示方式:
TabularInline
以表格的形式显示子模型对象。每个子模型对象将以一行的形式展示,显示相关字段的值。 -
编辑和新增:通过
TabularInline
,您可以在父模型的编辑页面中同时编辑和新增与之关联的子模型对象。您可以通过表格的行来编辑现有子模型对象,也可以通过表格底部的空白行来新增新的子模型对象。 -
嵌套显示:如果在子模型中还有其他的外键关联模型,您可以使用嵌套的
TabularInline
来进一步显示和编辑这些关联的模型对象。 -
指定数量:您可以通过设置
extra
属性来指定要显示的初始表格行数。
下面是一个示例,演示如何使用 TabularInline
来在 Django Admin 中显示和编辑关联的子模型对象:
from django.contrib import admin
from .models import ParentModel, ChildModel
class ChildModelInline(admin.TabularInline):
model = ChildModel
class ParentModelAdmin(admin.ModelAdmin):
inlines = [ChildModelInline]
admin.site.register(ParentModel, ParentModelAdmin)
在上述示例中,我们定义了一个名为 ChildModelInline
的 TabularInline
类,并将它添加到 ParentModelAdmin
的 inlines
属性中。这样,当在 Django Admin 后台编辑 ParentModel
对象时,将在同一个页面上显示和编辑相关的多个 ChildModel
。
通过使用 TabularInline
,您可以更方便地在 Django Admin 中管理父子模型之间的关系,提供了更直观和高效的界面来处理关联对象的增删改查操作。
案例
models.py
一个name 对应多个access_key_id
class Name(models.Model):
name = models.CharField(max_length=100)
# 其他字段...
class Meta:
verbose_name = "名字"
verbose_name_plural = "名字"
def __str__(self):
return self.name
class AccessKey(models.Model):
access_key_id = models.CharField(max_length=50)
name = models.ForeignKey(Name, on_delete=models.CASCADE)
# 其他字段...
class Meta:
verbose_name = "密钥ID"
verbose_name_plural = "密钥ID"
def __str__(self):
return self.access_key_id
admin.py
from .models import Name,AccessKey
class AccessKeyInline(admin.TabularInline):
model = AccessKey
class NameAdmin(admin.ModelAdmin):
inlines = [AccessKeyInline]
admin.site.register(Name, NameAdmin)
admin.site.register(AccessKey)
最终效果如下
一个name可以对应多个key id
一个key只对应一个name名字