Django ManyToMany 通过不同步或迁移

Posted

技术标签:

【中文标题】Django ManyToMany 通过不同步或迁移【英文标题】:Django ManyToMany Through not syncing or migrating 【发布时间】:2012-10-06 16:55:21 【问题描述】:

我有这个模型(为简洁起见,此处截断):

class Meal(models.Model):
    host = models.ForeignKey(User, related_name="cooking")
    cost = models.IntegerField(default=1)

    summary = models.CharField(max_length=1024, default="A good dinner")

    diners = models.ManyToManyField(User, through='Attendance',
    related_name="diners", blank=True)

当我同步它时,diners 字段被完全忽略。它没有出现在数据库中,运行syncdb时也没有错误。就好像它不存在一样。用户和出勤表都很好。

我在尝试使用 South 添加此字段时发现了这个问题,所以我也尝试了它作为替代方法。

有什么想法吗? 谢谢

【问题讨论】:

【参考方案1】:

在添加 diners 字段之前,您是否已经运行了 syncdb fyrir Meal?

因为 syncdb 不会改变现有表,您可以在此处阅读:

Django docs

旁注 - 我个人没有使用过 south,但我在开发时使用过 Django evolution。

编辑:

看了你的评论,我想我知道问题出在哪里了。

through 与 ManyToManyField 一起使用时,Django 不会向该表添加字段,所有必要的信息都在 attendance 表中。

【讨论】:

不,我首先使用南迁移,这有助于数据库更改。然后我废弃了整个数据库进行调试并重新运行了syncdb。不过还是谢谢。 我认为可能是这种情况,但这似乎很奇怪,我在文档中没有注意到这一点。我非常希望这是一个非规范化的字段,我可以简单地检查它的计数。我想我会在出勤或其他方面做一个模型经理。不过谢谢!

以上是关于Django ManyToMany 通过不同步或迁移的主要内容,如果未能解决你的问题,请参考以下文章

通过特定的 ManyToMany 对象订购 Django QuerySet

django 模型:如何克服“通过”ManyToMany 选项限制

django ManyToMany 通过帮助

Django ManyToMany 通用“通过”模型

在 Django 的 ManyToMany 关系中按 id 添加对象

django DetailView 没有从 ManyToMany 字段中捕获数据