2016-08-18 30 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