我在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 脚本中的NestedStackedInline
和NestedTabularInline
有什么区别?
[注意]:
版本: Python 2.7 和 Django 1.11
答案 0 :(得分:2)
如果您使用的是django-nested-inline
,则意味着您要在与父模型相同的页面上编辑模型,并使用admin中的父对象一次添加一个以上的子级。
Django管理员只是一个普通的Django应用程序,默认Django管理员中不能包含第二级内联(嵌套形式)。
P1.ParameterValue
和WHEN 1
之间的区别只是布局。实际上,两者在幕后的工作方式完全相同,唯一的区别是用于渲染的模板。检查官方docs。因此,为您的项目选择一个只是关于界面布局的偏好问题。
NestedStackedInline 的外观,模型的每个字段都位于另一个字段下。
这是 NestedTabularInline ,模型的每个字段都在一行中,列式