如何使用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提供了两个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来设置主键。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值