【问题标题】:Django admin site not displaying ManyToManyField relationshipDjango 管理站点不显示 ManyToManyField 关系
【发布时间】:2010-09-14 17:23:43
【问题描述】:

我正在开发一个我认为是非常标准的 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)

但是,管理站点不显示技术对象的任何 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'>

错误。还尝试将techs 添加到fields 列表中,但这给出了一个

没有这样的表:projects_project_techs

错误。我验证了,没有projects_project_techs 表,但有一个projects_tech。是不是我的同步数据库搞砸了?

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

【问题讨论】:

标签: python django


【解决方案1】:

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

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

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

【讨论】:

  • 生成的SQL代码可以直接复制到数据库客户端。运行“sqlite3 ”,然后选择“create table projects_project_techs...”部分,复制并粘贴到 SQLite 提示符中。
  • 要使用 South 实现模型更改。
【解决方案2】:

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

多对多表应该类似于 projects_project_techs

【讨论】:

    【解决方案3】:

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

    'TechInLine' 未定义

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

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

    python manage.py sqlreset <myapp>
    

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

    【讨论】:

    • 啊,我的复制/粘贴很糟糕。我将编辑问题。
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2011-12-24
    • 2015-09-08
    • 2015-04-28
    • 2016-09-16
    相关资源
    最近更新 更多