2008-10-02 96 views
3

我正在努力,我認爲是一個非常標準的Django站點,但我無法讓我的管理部分顯示適當的字段。Django管理網站不顯示ManyToManyField關係

這裏是我的models.py:

class Tech(models.Model): 
    name = models.CharField(max_length = 30) 

class Project(models.Model): 
    title = models.CharField(max_length = 50) 
    techs = models.ManyToManyField(Tech) 

換句話說,一個項目可以有不同的技術對象和不同的技術對象可以屬於不同的項目(項目X與Python和Django的創建,項目y爲C#和SQL Server)

但是,管理站點不顯示Tech對象的任何UI。這裏是我的admin.py:

class TechInline(admin.TabularInline): 
    model = Tech 
    extra = 5 

class ProjectAdmin(admin.ModelAdmin): 
    fields = ['title'] 
    inlines = [] 
    list_display = ('title') 

admin.site.register(Project, ProjectAdmin) 

我試着加入TechInline類的inlines名單,但會導致

<class 'home.projects.models.Tech'> has no ForeignKey to <class 'home.projects.models.Project'> 

錯誤。也嘗試添加techsfields名單,但給人的

沒有這樣的表:projects_project_techs

錯誤。我驗證了,沒有projects_project_techs表,但是有一個projects_tech之一。有沒有什麼可能會搞砸在我的syncdb?

我使用Sqlite作爲我的數據庫,如果有幫助。

+0

看到我的答案http://stackoverflow.com/questions/1339409/ – 2009-09-20 22:32:16

回答

2

我試着加入TechInline類的內聯列表中,但會導致

「TechInLine」沒有定義

是直複製粘貼?看起來你只是犯了一個錯字 - 試試TechInline而不是TechInLine

如果你的syncdb沒有創建合適的表,你可以手動完成。執行此命令:

python manage.py sqlreset <myapp> 

然後查找projects_project_techs表的定義。複製並粘貼到您的數據庫的客戶端。

+0

阿格,這是一個壞的複製/粘貼我。我將編輯該問題。 – swilliams 2008-10-02 05:03:12

0

假設您的應用程序被稱爲「項目」,techs表的默認名稱將爲projects_tech,項目表將爲projects_project。

的許多一對多表應該是這樣的projects_project_techs

0

@約翰米利 - 感謝sqlreset尖,這讓我在正確的道路上。 sqlreset生成的代碼告訴我projects_project_techs從未實際創建過。我結束了剛剛刪除我的deb.db數據庫並重新生成它。 techs然後出現,因爲它應該。

作爲一個旁註,我不得不做一個admin.site.register(Tech)以便能夠從Project頁面創建類的新實例。

我可能會發布另一個問題,看看是否有實現模型的變化(因爲我敢肯定,是什麼原因造成我的問題),而不抹數據庫更好的辦法。

+0

生成的SQL代碼可以直接複製到數據庫客戶端。運行「sqlite3 」,然後選擇「create table projects_project_techs ...」部分,將其複製並粘貼到SQLite提示符中。 – 2008-10-02 18:42:05