我有3个模型:
class Top(models.Model):
toptitle = models.CharField(max_length=255, verbose_name='top title')
class Middle(models.Model):
top = models.ForeignKey(Top)
middletitle = models.CharField(max_length=255, verbose_name='middle title')
importantfield1 = models.TextField(verbose_name='important field 1')
importantfield2 = models.TextField(verbose_name='important field 2')
...
importantfield20 = models.TextField(verbose_name='important field 20')
现在,当我查看 Top 的 Admin 页面时,我想查看与它相关的 Middles(并且能够从此页面或此页面上的链接添加和编辑 Middles)。
我可以通过内联轻松做到这一点。问题是中间有这么多(必需)字段,它变得笨拙。
如果我指定内联只显示中间标题
class MiddleInline(admin.TabularInline):
model = MiddleInline
fields = ('middletitle',)
extra = 0
我有两个问题。首先是我无法进入可以编辑已存在的中间人的所有字段的页面(无需进入管理菜单,选择中间人并在那里找到正确的中间人) . 第二个问题是,如果我尝试从这个内联中添加另一个中间,它允许我创建一个只有中间标题的中间,但将所有必需的重要字段留空。
我已经能够通过添加一个链接来编辑对象来处理第一个问题:
class MiddleInline(admin.TabularInline):
def changeform_link(self,instance):
if instance.id:
changeform_url = reverse(
'admin:myapp_middle_change', args=(instance.id,)
)
return '<a href="'+ changeform_url + '" target="_blank">Details</a>'
return ''
changeform_link.allow_tags = True
changeform_link.short_description = '' # omit column header
model = MiddleInline
fields = ('middletitle','changeform_link')
extra = 0
但现在我不确定如何处理第二个问题。
理想情况下,我希望“添加另一个中间”部分打开一个弹出窗口以创建一个新的中间(顶部已经设置并具有/需要所有重要字段),保存时会刷新内联。
有没有办法做到这一点?我接近这个完全错误吗?