2008-10-02 60 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