如何使用Django Admin的InlineModelAdmin及案例

一个类别包含多篇文章,假设我们希望在查看编辑某个类别信息时,一同显示并编辑同属该类别下的所有文章信息,我们可以定义先定义ArticleInline类,然后把其附在CategoryAdmin里。这样我们就可以实现在同一页面上编辑类别和所属文章信息了,是不是很帅?

#blog/admin.py

from django.contrib import admin
from .models import Article, Category, Tag

class ArticleInline(admin.TabularInline):
    model = Article
    '''设置列表可显示的字段'''
    fields = ('title', 'author',  'status', 'mod_date',)


class CategoryAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('name',)}
    raw_id_fields = ("parent_category", )
    inlines = [ArticleInline, ]

admin.site.register(Category, CategoryAdmin)

展示效果如下所示。试想下,你想手动编写同样代码又要花多长时间?估计使用Mixins和Formsets早就让你心烦意乱了吧。

如何使用Django Admin的InlineModelAdmin及案例_第1张图片

Django提供了两个InlineModelAdmin的子类:TabularInline和StackedInline,区别在于使用的模板, 一个横着,一个竖着,选项是一样的。InlineModelAdmin和ModelAdmin共同的常用options有:

form
fieldsets
fields
exclude
filter_horizontal
filter_vertical
ordering
prepopulated_fields
get_queryset()
radio_fields
readonly_fields
raw_id_fields

 

额外增加的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()也返回inline的额外数目。

InlineModelAdmin.max_num
可展示得最大数目。

InlineModelAdmin.get_max_num()也返回此数字。

InlineModelAdmin.min_num
可展示的最小数目。

InlineModelAdmin.get_min_num()也返回此数目。

InlineModelAdmin.raw_id_fields

 

使用InlineModelAdmin一定要注意以下几点哦。

  • InlineModelAdmin不支持使用list_display选项,而要使用fileds或exclude选项来设置所数据表需要显示的字段。

  • 当一个model有多个ForeignKey时,必需使用fk_name来设置主键。

如何使用Django Admin的InlineModelAdmin及案例_第2张图片

大江狗

2018.11.1

你可能感兴趣的:(Django)