【问题标题】:Error when adding a ManyToManyField in Django在 Django 中添加 ManyToManyField 时出错
【发布时间】:2010-01-21 02:18:36
【问题描述】:

好的,所以我最近发布了一个关于添加 ManyToManyField

时出现错误的问题

模型如下

class MagicType(models.Model):

     name = models.CharField(max_length=155)
     parent = models.ForeignKey('self', null=True, blank=True)

class Spell(models.Model):

    name = models.CharField(max_length=250, db_index=True)
    magic_words = models.CharField(max_length=250, db_index=True)
    magic_types = models.ManyToManyField(MagicType)

这是我使用 django-evolution 迁移时遇到的错误:

AttributeError: 'ManyToManyField' object has no attribute '_get_m2m_column_name'

那么,有没有一种方法可以手动设置 ManyToManyField 而无需在两个模型中指定它?假设有这样的模型

class SpellToMagicType(models.Model):
     magic_type = models.ForeignKey(MagicType)
     spell = models.ForeignKey(Spell)

但是我将如何在 Django 的 ORM 中继续使用它?

非常感谢您的帮助。谢谢!

【问题讨论】:

    标签: python django django-models django-orm django-evolution


    【解决方案1】:

    同样的事情,我回答你的另一个问题Is a reason I can't add a ManyToManyField? 基本上这个错误是因为你的模型(ORM)中的代码发生了变化,但你的数据库没有变化,而 django-evolution 并没有解决数据库变化的许多问题,我建议你寻找 django-extensions (http://code.google.com/p/django-command-extensions/) 和命令 sqldiff,但看看我的另一个答案

    【讨论】:

      【解决方案2】:

      这或多或少是我会做的方式。事实上,我很困惑为什么这不起作用,并在一个干净的 Django 1.1 环境中自己尝试了它——它运行得很好。

      您是否尝试过自己将这个模型放在一个干净的环境中,然后看看会得到什么?

      【讨论】:

      • 谢谢约翰。我相信它可能会起作用,也许它只是 django-evolution 不支持。我有点害怕删除和重新同步模型,以防万一我丢失了数据库中的现有数据,包括 ForeignKeys。我什至会尝试自己迁移模型结构,但我不知道该怎么做。
      • 明白了。对于 django-evolution 邮件列表来说,这可能是一个很好的问题。它位于groups.google.com/group/django-evolution。与此同时,我会尝试克隆你的数据库,看看你在我上面提到的干净环境中使用模型时会得到什么。
      猜你喜欢
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2016-07-29
      • 1970-01-01
      • 2012-04-10
      • 2019-01-04
      • 1970-01-01
      相关资源
      最近更新 更多