0

我有一个表,其中只有少数条目,如果我可以在他们的列表中使用内联而不是强迫员工每次都点击进入编辑页面,那就太好了。

也就是说,当有人单击通常会提供模型对象列表的链接时,他们应该会看到内联显示的模型对象。

我尝试过这样的事情,但不出所料,它给出了一个错误,因为没有外键:

class MyModelInline(admin.StackedInline): 
    model = MyModel               

class MyModelAdmin(admin.ModelAdmin): 
    inlines = [MyModelInline,]    

admin.site.register(MyModel, MyModelAdmin)
4

1 回答 1

0

为了让它像你描述的那样工作,你需要一个“编辑器”模型作为数据的父级。您要显示的所有行都应该有一个指向单个“编辑器”模型对象的外键。所以,在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 时,我都必须检查我的更改是否不会干扰新功能。但是,有时这是在管理界面中执行一些更高级操作的唯一方法。我已经在我自己的项目中完成了这项工作,但希望将更改保持在最低限度。

于 2013-01-15T20:17:47.110 回答