基础

from django.db import models

class Author(models.Model):
	name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(max_length=100)

如果想在Author页面上编辑book:

from django.contrib import admin

class BookInline(admin.TabularInline):
    model = Book

class AuthorAdmin(admin.ModelAdmin):
    inlines = [BookInline,]

Django提供了两个InlineModelAdmin的子类:TabularInlineStackedInline,基本功能一样,只是样式不同

多对多

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
from django.contrib import admin

class MembershipInline(admin.TabularInline):
    model = Group.members.through

class PersonAdmin(admin.ModelAdmin):
    inlines = [
        MembershipInline,
    ]

class GroupAdmin(admin.ModelAdmin):
    inlines = [
        MembershipInline,
    ]
    exclude = ('members',)

admin.site.register(Person, PersonAdmin)
admin.site.register(Group, GroupAdmin)

注意事项:

  1. MembershipInline类指向Group.members.through
  2. GroupAdmin 必须排除 members字段.

InlineModelAdmin options选项

InlineModelAdmin和ModelAdmin共通的options有:

form
fieldsets
fields
formfield_overrides
exclude
filter_horizontal
filter_vertical
ordering
prepopulated_fields
get_queryset()
radio_fields
readonly_fields
raw_id_fields
formfield_for_choice_field()
formfield_for_foreignkey()
formfield_for_manytomany()
has_add_permission()
has_change_permission()
has_delete_permission()

额外增加的options有:

InlineModelAdmin.model		#inline使用的model,必需。

InlineModelAdmin.fk_name	#model的name,当有多个外键时使用。

InlineModelAdmin.formset	#缺省BaseInlineFormSet。

InlineModelAdmin.form		#缺省ModelForm。当创建formset时传递给inlineformset_factory()。

InlineModelAdmin.extra		#inline的额外数目。
InlineModelAdmin.get_extra()

InlineModelAdmin.max_num	#可展示的最大数目。
InlineModelAdmin.get_max_num()
InlineModelAdmin.min_num	#可展示的最小数目。
InlineModelAdmin.get_min_num()

InlineModelAdmin.raw_id_fields	#同ModelAdmin。
InlineModelAdmin.template		#使用的模板。

InlineModelAdmin.verbose_name	#覆盖meta class中的verbose_name。
InlineModelAdmin.verbose_name_plural

InlineModelAdmin.can_delete

InlineModelAdmin.get_formset(request, obj=None, **kwargs)#参考ModelAdmin.get_formsets_with_inlines