基础
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
的子类:TabularInline
和StackedInline
,基本功能一样,只是样式不同
多对多
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)
注意事项:
MembershipInline
类指向Group.members.through
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