在Django中添加ManyToManyField时出错

2 投票
2 回答
3487 浏览
提问于 2025-04-15 18:17

好的,我最近发了一个问题,关于在添加一个多对多字段(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'

那么,有没有办法手动设置一个多对多字段,而不需要在两个模型中都指定它呢?比如说用这样的模型:

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

但是我该如何在Django的ORM中使用这个呢?

非常感谢大家的帮助!

2 个回答

1

这基本上就是我会做的方式。实际上,我也很困惑为什么这个不管用,于是在一个干净的Django 1.1环境中自己试了一下——结果一切都很好。

你有没有试着把这个模型放在一个干净的环境里,看看会得到什么结果?

3

同样的事情,我在回答你另一个问题 为什么我不能添加ManyToManyField? 基本上,这个错误是因为你在模型(ORM)里的代码发生了变化,但你的数据库没有相应地更新。而且,django-evolution并不能解决数据库变化带来的很多问题。我建议你看看django-extensions(http://code.google.com/p/django-command-extensions/)和sqldiff这个命令,不过你可以看看我之前的回答。

撰写回答