NestedStackedInline和NestedTabularInline之间的区别

时间:2018-08-05 10:37:19

标签: python django django-models

我在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 脚本中的NestedStackedInlineNestedTabularInline有什么区别?


[注意]:

版本: Python 2.7 Django 1.11


1 个答案:

答案 0 :(得分:2)

如果您使用的是django-nested-inline,则意味着您要在与父模型相同的页面上编辑模型,并使用admin中的父对象一次添加一个以上的子级。

  

Django管理员只是一个普通的Django应用程序,默认Django管理员中不能包含第二级内联(嵌套形式)。

P1.ParameterValueWHEN 1之间的区别只是布局。实际上,两者在幕后的工作方式完全相同,唯一的区别是用于渲染的模板。检查官方docs。因此,为您的项目选择一个只是关于界面布局的偏好问题。

NestedStackedInline 的外观,模型的每个字段都位于另一个字段下。

enter image description here

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

enter image description here