python - 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脚本NestedStackedInline
和NestedTabularInline
in有什么区别?
[注意]:
版本:Python 2.7和Django 1.11
解决方案
如果您正在使用django-nested-inline
,则表示您想在与父模型相同的页面上编辑模型,并在 admin 中使用父对象一次添加 1 级以上的子级。
Django 管理员只是一个普通的 Django 应用程序,您不能在默认的 Django 管理员中拥有第二级内联(嵌套表单)。
NestedStackedInline
和之间的区别NestedTabularInline
只是Layout。事实上,两者在幕后工作完全相同,唯一的区别是用于渲染的模板。检查官方文档。因此,为您的项目选择一个只是关于界面布局的偏好问题。
这就是NestedStackedInline的外观,模型的每个字段都在其他字段之下。
这是NestedTabularInline,模型的每个字段都在一行中,按列
推荐阅读
- java - 生成带有图像的 Excel 工作表
- javascript - PWA beforeinstallprompt 未调用
- sql - 我们能否实现 SSRS 中的行级安全性?
- java - RecyclerView 不更新他的项目的布局
- max - MDX 从切片器元素获取最小最大日期
- python - 如何与 kafka/pykafka 平衡消费者合作?
- sql - ORACLE SQL - 如何找到上一个辞职日期和加入日期之间的间隔?
- python - 在 Pandas 中调用 read_csv 后无法重用输入流
- firebase-authentication - 自定义参数 HL 代表什么?
- ios - RxSwift 打断日语 - 罗马字输入