为了让它像你描述的那样工作,你需要一个“编辑器”模型作为数据的父级。您要显示的所有行都应该有一个指向单个“编辑器”模型对象的外键。所以,在models.py中:
from django.db import models
class Editor(models.Model):
pass
class MyModel(models.Model):
name = models.CharField(max_length=100) # Field added for demonstration
# ... add any other fields you like ...
editor = models.ForeignKey(Editor)
在 admin.py 中:
from django.contrib import admin
from Test.models import Editor, MyModel
class MyModelInline(admin.StackedInline):
model = MyModel
class EditorAdmin(admin.ModelAdmin):
inlines = [MyModelInline,]
admin.site.register(Editor, EditorAdmin)
其他一些需要考虑的事情:
当您以编程方式创建新的 MyModel() 对象时,您必须始终将外键设置为指向编辑器。应该只有一个编辑器实例才能按照您的描述工作。使用管理界面时,应使用编辑器对象的管理页面自动设置此外键。我建议在生产中限制除您自己之外的所有人创建和删除编辑器对象。如果有人删除了编辑器对象,那么所有 MyModel 对象也会消失。
备选方案:
1)如果管理人员所做的编辑很简单,那么我建议改为实施“操作” 。
2)还有覆盖管理模板的可能性。我个人不太喜欢这个选项,因为每次更新 Django 时,我都必须检查我的更改是否不会干扰新功能。但是,有时这是在管理界面中执行一些更高级操作的唯一方法。我已经在我自己的项目中完成了这项工作,但希望将更改保持在最低限度。