django在Admin中创建外键链接

时间:2016-08-18 04:20:16

标签: django

我正在使用django1.9,

我有一个有外国人的模型

class Foo(models.Model):
  bar = models.ForeignKey(Bar)

class Bar(models.Model):
  name = models.CharField(max_length=50)

这是我的FooAdmin:

class FooAdmin(admin.ModelAdmin):
  list_display = ['bar']

  def def related_bar(self, obj):
    link = urlresolvers.reverse("admin:foo_foos", args=[obj.bar.id])
    return u'<a href="%s">%s</a>' % (link, obj.bar.id)
related_bar.short_description = 'bar'

现在在管理员Foo的显示列表中,我想要一个链接转到条形显示列表,我已经尝试过,但它引发了以下错误,

Reverse for 'foo_foos' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

我肯定错过了一些东西,但想通了。那么在django中最好的方法是什么?我试图在文档中搜索但在这个问题上找不到相关的方法。

1 个答案:

答案 0 :(得分:1)

首先,您尝试获取bar显示列表,但您正在解析foo_foos而不是foo_bar。此外,您缺少_change后缀,以表明您想要管理员详细信息视图。

def related_bar(self, obj):
    link = urlresolvers.reverse("admin:foo_bar_change", args=[obj.bar.id])
    return u'<a href="%s">%s</a>' % (link, obj.bar.id)

来自Django docs,admin urls模式,是这些。

Page        URL name                                     Parameters
Changelist  {{ app_label }}_{{ model_name }}_changelist  
Add         {{ app_label }}_{{ model_name }}_add     
History     {{ app_label }}_{{ model_name }}_history     object_id
Delete      {{ app_label }}_{{ model_name }}_delete      object_id
Change      {{ app_label }}_{{ model_name }}_change      object_id