Django Admin高级开发:多层级内联嵌套包nested-admin
Django-nested-admin是一个可以嵌套admin内联的项目(即在InlineModelAdmin类上定义内联)。Django admin自带两种嵌套方式TabularInline和StackedInline,用于在父模型的编辑页面中以表格形式显示关联的子模型对象。
一、安装
pip install django-nested-admin
二、配置
- setting.py添加如下
INSTALLED_APPS = (# ...'nested_admin',)
2.配置url.py
urlpatterns = [# ...path('_nested_admin/', include('nested_admin.urls')),]
3.说明
使用django-nested-admin,请使用以下类代替它们的django admin原有的model方法
| django.contrib.admin | nested_admin |
| ModelAdmin | NestedModelAdmin |
| InlineModelAdmin | NestedInlineModelAdmin |
| StackedInline | NestedStackedInline |
| TabularInline | NestedTabularInline |
三、实例
使用django-nested-admin实现三级嵌套
models.py
class Choice(models.Model):#投票选项表question = models.ForeignKey(Question, on_delete=models.CASCADE,editable=False,related_name='q_choice', )choice_text = models.CharField("选项内容",max_length=200)img = models.ImageField("选项图", upload_to="media/polls/",null=True,blank=True)votes = models.IntegerField("投票数",default=0,editable=False)ctime = models.DateTimeField("创建时间", auto_now_add=True, blank=True, max_length=20)def __str__(self):return self.choice_textclass Meta:db_table = "choice"verbose_name = "投票选项"verbose_name_plural = verbose_name
admin.py
import nested_adminclass ChoiceInline(nested_admin.NestedTabularInline):model = Choiceextra =4exclude = ('question','question_id',)readonly_fields = ('votes',)class QuestionInline(nested_admin.NestedStackedInline):model = Questioninlines = [ChoiceInline]extra = 1@admin.register(Polls)class PollsAdmin(nested_admin.NestedModelAdmin):# form = PollsFormlist_display =['ordinal_number','title','questions','starttime','endtime','view','max','analysis','ctime']list_display_links = ('title',)inlines = [QuestionInline]
最终运行效果:

可以实现三级嵌套并动态添加
github:https://github.com/theatlantic/django-nested-admin官方文档:https://django-nested-admin.readthedocs.io/en/latest/
菲宇 Python与Django学习
THE END




