django admin 内联(和嵌套内联):我怎样才能获得这个功能?

Posted

技术标签:

【中文标题】django admin 内联(和嵌套内联):我怎样才能获得这个功能?【英文标题】:django admin inlines (and nested inlines) : how can I get this functionality? 【发布时间】:2011-05-02 20:23:57 【问题描述】:

我有点困惑,为什么这种功能在管理员中不是默认的,但也许有人可以给我一些提示,告诉我如何去做。

我有一个项目应用程序,它跟踪项目并通过管理员进行编辑。每个项目都有许多与 ForeignKey 相关的模型(链接、平面页面、视频、图像等),可以作为内联放置在项目管理中。

(一个或两个模型有嵌套的内联,所以它们不会显示在管理中(this 和 this 票处理这个)

我希望能够在项目管理员中内联编辑这些模型(这会变得凌乱且难以使用),我更喜欢该相关模型的所有当前实例的列表,以及每个模型的简单添加/编辑按钮这会打开一个包含该模型表单的弹出窗口。

Project Admin:
    - Normal Fields

    - Links:
        -Link 1 (edit)
        -Link 2 (edit)
        + add link <- popup


    - Images:
        -Image 1 (edit)
        -Image 2 (edit)
        + add image <- popup

等等。我该怎么写这个?我只需要为管理面板的一个部分/模型执行此操作,因此我认为没有必要编写自己的 Crud 后端。

谢谢

【问题讨论】:

【参考方案1】:

我曾经在一个应用程序中实现过这样的东西,但是由于 django-admin 不支持嵌套内联(我的意思是内联内联),我采用了稍微不同的方法。用例是您有一张发票(带有一些内联属性)并且您有收据(同样带有内联属性)。收据具有发票模型的外键(基本上,收据是发票的部分付款)。

我通过在发票列表视图中添加一个字段来实现它,该字段链接到过滤的收据列表视图。

所以在发票管理中,会有:

def admin_view_receipts(self, object):
    url = urlresolvers.reverse('admin:invoice_%s_changelist'%'receipt')
    params = urllib.urlencode('invoice__id__exact': object.id)
    return '<a href="%s?%s">Receipts</a>' % (url, params)
admin_view_receipts.allow_tags = True
admin_view_receipts.short_description = 'Receipts'

这会在列表视图中为您提供一个链接,该链接将您带到另一个列表视图,但由外键过滤。现在,您可以对这两个模型进行内联并轻松访问相关模型。

【讨论】:

我不太明白这个。这会将收据列表添加到所有发票的更改列表或发票的实际管理页面中吗?我只想在发票管理中列出所有相关收据的列表,以及将您带到收据管理页面的链接(选择正确的发票作为外键) 既然问这个:这是我经常采用的方法,也是最容易实施的方法之一 刚刚看到你之前的评论。我假设你已经弄清楚了:) 也许他得到了@zsquare,但没有得到其他人。这似乎缺少代码部分。 -1

以上是关于django admin 内联(和嵌套内联):我怎样才能获得这个功能?的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin Cookbook-23如何在Django admin中添加嵌套的内联

Django 嵌套内联 TemplateDoesNotExist

在 django admin 中为内联项目添加完整更改表单的链接?

Django Admin 中的内联

Django admin 不同的内联用于更改和添加视图

Django admin - 内联内联(或者,一次编辑三个模型)