2016-08-18 31 views
0

我使用django1.9,的Django在管理创建一个链接,外键

我有了一个外国如

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中做什么最好的方法是什么?我试图在文档中搜索,但在这个问题上找不到相关的howto。

回答

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文档,管理网址模式,是这些。

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