📅  最后修改于: 2023-12-03 15:14:44.115000             🧑  作者: Mango
Django 内联 (inline) 功能提供了一种可以在同一个编辑页面中管理一对多关系的方式。内联对象通常用于管理与其所属的主要对象具有层次关系的子对象。
Django 内联又被称为嵌套内联,因为您可以使用内联来管理另一个内联关系。
Django 支持三种内联类型:
TabularInline
:内联子对象以表格形式呈现StackedInline
:内联子对象以堆叠块的形式呈现CollapsibleInline
:内联子对象以可折叠块的形式呈现在下面的例子中,我们将使用 TabularInline
类型的内联对象。
为了实现内联功能,您需要完成以下两个步骤:
假设我们有一个 Author
模型和一个 Book
模型。每个作者可以有多本书。我们的目标是创建一个 Author
管理页面,其中每个作者下面列出了他/她所写的所有书籍。
模型代码如下:
class Author(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=50)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
视图代码如下:
class AuthorAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
class BookAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'author')
list_filter = ('author',)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
我们将创建一个内联对象 BookInline
,将其作为 AuthorAdmin
视图的一部分。BookInline
对象将使用 TabularInline
类型。
class BookInline(admin.TabularInline):
model = Book
extra = 1
class AuthorAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
inlines = [BookInline]
完成后,更新相关代码后,重新运行服务器,访问 Author
管理页面,您现在应该看到每个作者下面列出的所有书籍。
内联提供了一种在单个编辑页面上管理对父对象的多个子对象的方式。 Django 支持三种内联类型:TabularInline
、StackedInline
和 CollapsibleInline
。
要实现内联功能,您需要创建内联模型并将它们添加到主模型的管理器中。