4

我正在开发一个我认为非常标准的 django 站点,但是我无法让我的管理部分显示正确的字段。

这是我的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一张。是不是我的同步数据库搞砸了?

如果有帮助,我将使用 Sqlite 作为我的数据库。

4

3 回答 3

3

我尝试将 TechInline 类添加到内联列表中,但这会导致

'TechInLine' 未定义

是直接复制粘贴吗?看起来您只是打错字了 - 尝试TechInline而不是TechInLine.

如果您的 syncdb 没有创建正确的表,您可以手动创建。执行这个命令:

python manage.py sqlreset <myapp>

并查找projects_project_techs表的定义。将其复制并粘贴到数据库的客户端中。

于 2008-10-02T04:48:29.987 回答
0

假设您的应用名为“projects”,那么您的 techs 表的默认名称将是 projects_tech,projects 表将是 projects_project。

多对多表应该类似于 projects_project_techs

于 2008-10-02T09:27:51.517 回答
0

@John Millikin - 感谢 sqlreset 提示,这让我走上了正确的道路。sqlreset 生成的代码向我展示了projects_project_techs从未实际创建过的代码。我最终只是删除了我的 deb.db 数据库并重新生成它。techs然后出现了它应该。

顺便说一句,我必须做一个admin.site.register(Tech)才能从项目页面创建类的新实例。

我可能会发布另一个问题,看看是否有更好的方法来实现模型更改(因为我很确定这是导致我的问题的原因)而不擦除数据库。

于 2008-10-02T15:17:50.707 回答