首页 > 解决方案 > NestedStackedInline 和 NestedTabularInline 之间的区别

问题描述

我在 Django 项目中使用嵌套模型。


以下代码段是models.py

from django.db import models
from django.db.models.deletion import CASCADE

class Model_(models.Model):
    name = models.CharField(max_length=50, default="This is a model")
    frequently = models.FloatField(default=1.0)

    def __str__(self):
        return self.name

class SubModel(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=8, default='0x')
    model_ = models.ForeignKey(Model_, on_delete=CASCADE)

    def __str__(self):
        return self.name    

class Metadata(models.Model):
    key = models.CharField(max_length=100)
    value = models.CharField(max_length=100)
    sub_model = models.ForeignKey(SubModel, on_delete=CASCADE)

这是我的admin.py脚本:

from django.contrib import admin
from nested_inline.admin import NestedTabularInline, NestedStackedInline,\
    NestedModelAdmin
from <djano-application-name>.models import Model_, SubModel, Metadata

class MetadataAdmin(NestedTabularInline):
    model = Metadata
    extra = 1

class SubModelAdmin(NestedStackedInline):
    model = SubModel
    inlines = [MetadataAdmin]
    extra = 1

class Model_Admin(NestedModelAdmin):
    model = Model_
    inlines = [SubModelAdmin]
    list_display = ['name']

admin.site.register(Model_, Model_Admin)

问题:

admin.py脚本NestedStackedInlineNestedTabularInlinein有什么区别?


[注意]:

版本:Python 2.7Django 1.11


标签: pythondjangodjango-models

解决方案


如果您正在使用django-nested-inline,则表示您想在与父模型相同的页面上编辑模型,并在 admin 中使用父对象一次添加 1 级以上的子级。

Django 管理员只是一个普通的 Django 应用程序,您不能在默认的 Django 管理员中拥有第二级内联(嵌套表单)。

NestedStackedInline和之间的区别NestedTabularInline只是Layout。事实上,两者在幕后工作完全相同,唯一的区别是用于渲染的模板。检查官方文档。因此,为您的项目选择一个只是关于界面布局的偏好问题。

这就是NestedStackedInline的外观,模型的每个字段都在其他字段之下。

在此处输入图像描述

这是NestedTabularInline,模型的每个字段都在一行中,按列

在此处输入图像描述


推荐阅读