2010-05-18 62 views
3

林引用的Django模型尋求建立在管理面板的測試程序,它記錄書籍,出版商和作者的視圖(如在djangoproject.com)我如何從另一個模型

我有以下兩種模式定義。

class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    email = models.EmailField() 

    def __unicode__(self): 
     return u'%s %s' % (self.first_name, self.last_name) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author) 
    publisher = models.ForeignKey(Publisher) 
    publication_date = models.DateField() 

    def __unicode__(self): 
     return self.title 

我想要做的是更改Book模型以引用任何作者的first_name並使用admin.AdminModels顯示此內容。

#Here is the admin model I've created. 

class BookAdmin(admin.ModelAdmin): 
    list_display = ('title', 'publisher', 'publication_date') # Author would in here 
    list_filter = ('publication_date',) 
    date_hierarchy = 'publication_date' 
    ordering = ('-publication_date',) 
    fields = ('title', 'authors', 'publisher', 'publication_date') 
    filter_horizontal = ('authors',) 
    raw_id_fields = ('publisher',) 

據我所知,你不能在同一個模型中有兩個ForeignKeys。任何人都可以給我一個如何做到這一點的例子嗎?

我已經嘗試過不同的東西,它一直在狂奔着我整天。我很新的Python/Django。

要說清楚 - 我只是想讓作者姓名和名字出現在書名和出版商名字旁邊。

謝謝

+0

不確定你的問題的答案,但「你不能有兩個ForeignKeys在同一模型」不是一個真實的陳述。我也認爲你用__unicode __()函數混淆了外鍵。 – 2010-05-18 23:55:30

回答

3

您可以在一個模型上有多個外鍵。 如果您要將外鍵字段的名稱放在list_display中,您將始終只能看到關聯模型的__unicode__表示形式。 但您可以添加這樣的功能,以您的BookAdmin

def first_names(self, obj): 
    return ','.join(a.first_name for a in obj.authors.all()) 
get_sites.short_description = 'First Names' 

然後加入'first_names'list_display

+0

請注意,此方法也可以位於Model中,而不僅僅是ModelAdmin。 – 2010-05-19 14:06:18

+0

這仍然是相關的嗎?當我嘗試這樣做時,我得到一個錯誤配置的異常 - 'BookAdmin.list_filter [0]'指的是'first_names',它不涉及字段 – Shade 2013-06-20 14:49:37

+0

是的......也許可以在某處顯示您的管理員類... – 2013-06-21 06:16:07

相關問題