在 Django 管理更改/添加页面中显示 ForeignKey 数据

Posted

技术标签:

【中文标题】在 Django 管理更改/添加页面中显示 ForeignKey 数据【英文标题】:Displaying ForeignKey data in Django admin change/add page 【发布时间】:2011-08-05 15:03:06 【问题描述】:

我正在尝试让模型的属性显示在另一个模型的 Django 管理更改/添加页面中。这是我的模型:

class Download(model.Model):
    task = models.ForeignKey('Task')

class Task(model.Model):
    added_at = models.DateTimeField(...)

不能切换外键,所以我不能使用内联,当然fields = ('task__added_at',)在这里也不起作用。

这样的标准方法是什么? (还是我把 Admin 拉得太远了?)

我已经在使用自定义模板,所以如果这是可以做到的答案。但是,我更愿意在管理员级别执行此操作。

【问题讨论】:

您能否就您试图在管理员中实现的工作流程提供更多背景信息?从您的帖子看来,您正在编辑下载,并且需要访问任务模型,对吗? 用户请求下载,该下载由延迟任务生成并通过电子邮件发送给他们(我在 Windows 上,所以没有 celeryd,更可惜) 好的,那么外键字段需要做什么呢? 显示Download.task.added_at @BrianHicks 你能做到吗? 【参考方案1】:

如果不需要编辑,可以将其显示为只读字段:

class DownloadAdmin(admin.ModelAdmin):
    readonly_fields = ('task_added_at',)

    def task_added_at(self, obj):
        return obj.task.added_at

【讨论】:

那行不通,因为 readonly_fields 必须是字段的子集,而且我不能向字段添加函数。 我不明白你的意思。这确实有效 - 请参阅the documentation。 也适用于字段集。荣誉。

以上是关于在 Django 管理更改/添加页面中显示 ForeignKey 数据的主要内容,如果未能解决你的问题,请参考以下文章

Django将硬编码的href链接添加到管理模型的表单视图页面

添加自定义 Django 管理操作

如何在 django 中添加项目下拉菜单

输入 Django 管理员添加页面后的 URL 重新路由

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

如何在 Django 管理列表显示页面中编辑 ManyToManyField?