如果Django模型包含外键字段,并且该字段以列表模式显示,则它将显示为text,而不是对外来对象显示link.

是否可以将所有外键自动显示为链接而不是纯文本?

(当然可以逐个现场进行,但有通用方法吗?)

Example:

class Author(models.Model):
    ...

class Post(models.Model):
    author = models.ForeignKey(Author)

现在我 Select 一个ModelAdmin,以便作者以列表模式显示:

class PostAdmin(admin.ModelAdmin):
    list_display = [..., 'author',...]

现在在列表模式下,author字段将只使用Author类的__unicode__方法来显示author.最重要的是,我想要一个link指向相应的作者在管理网站的网址.可能吗?

Manual method:

为了完整起见,我添加了手动方法.这将是在PostAdmin类中添加一个方法author_link:

def author_link(self, item):
    return '<a href="../some/path/%d">%s</a>' % (item.id, unicode(item))
author_link.allow_tags = True

这将适用于那个特定的领域,但那是我想要的not个.我想要一个通用的方法来达到同样的效果.(问题之一是如何自动计算出Django管理站点中对象的路径.)

推荐答案

我不认为有一种机制可以自动地开箱即用地做你想做的事情.

但是,就根据对象的id确定管理编辑页面的路径而言,您只需要两条信息:

a)self.model._meta.app_label

b)self.model._meta.module_name

然后,例如,要转到该模型的编辑页面,您可以执行以下操作:

'../%s_%s_change/%d' % (self.model._meta.app_label, self.model._meta.module_name, item.id)

看看django.contrib.admin.options.ModelAdmin.get_urls,看看他们是怎么做到的.

我想你可以有一个callable,它接受一个模型名和一个id,创建一个指定类型的模型,只是为了得到标签和名称(无需访问数据库),并生成上面的URL.

但是你确定你不能使用内联线吗?将所有相关组件放在一个页面中,将有助于实现更好的用户界面...

Edit:

Inlines(链接到文档)允许管理界面在一个页面中显示父子关系,而不是将其一分为二.

在您提供的Post/Author示例中,使用内联意味着用于编辑帖子的页面还将显示用于添加/编辑/删除作者的内联表单.对最终用户来说要自然得多.

您可以在管理列表视图中执行的操作是在Post模型中创建一个可调用对象,该对象将呈现逗号分隔的作者列表.因此,您将拥有显示正确作者的Post list视图,并且您可以直接在Post管理界面中编辑与Post相关联的作者.

Django相关问答推荐

Django的update_or_create失败,尽管指定了kwargs'

Django/SendGrid-密码重置-发件人地址与验证的发件人身份不匹配.";

如何将Django项目连接到容器化的PostgreSQL数据库?

Django:我的上下文变量不能用于重复的for循环

Django ORM ForeignKey查询使用注释设置输出

未强制执行枚举值

错误``Forbidden (403) CSRF 验证失败.请求中止.``` 当try 登录管理员时

如何在 ModelViewSet 逻辑中读取查询字符串值?

为什么我的搜索功能返回错误相关字段查找无效:​​类别

Django 表单有 Select 但也有自由文本选项?

可插拔应用程序的Django默认设置约定?

如何在 Django 中返回静态 HTML 文件作为响应?

在 Django REST Framework 中找不到资源时如何返回 404

django 复数模板

Django 模型:delete() 未触发

Django 自定义用户邮箱帐户验证

python/django中setattr和对象操作的区别

Django 的 Select .如何设置默认选项?

左加入 Django ORM

ValueError: 无法解析相关模型 u'app.model'