我的模特是
class Movie(models.Model):
name = models.CharField(max_length=10)
characters = models.ManyToManyField(Character)
def __str__(self):
return self.name
class Character(models.Model):
name = models.CharField(max_length=10)
movies = models.ManyToManyField(Movie)
def __str__(self):
return self.name
当我进行迁移时,终端状态是 “文件” / Users / osx / Desktop / Django基础2 / Django模型关系/mysite/core/models.py”,电影中的第19行 字符=模型。ManyToManyField(Character) NameError:未定义名称“字符” (myvenv)(基本)OSX-MacBook-Pro:mysite osx $ “
我不知道错误来自哪里
答案 0 :(得分:0)
请不在两个模型中定义两个多对多关系。如果您在其中一个模型中定义多对多字段。 Django将在另一个模型中以“反向”自动构建关系。通过定义两个多对多模型,这意味着,如果将电影添加到多对多字段之一中的角色之一,则该字符将不会出现在添加到该角色的电影中。 / p>
出现错误的原因是因为您引用到一个类,该类当时在代码中尚未定义。您可以重新排序模型,或使用包含模型名称的字符串。例如:
class Movie(models.Model):
name = models.CharField(max_length=10)
# no characters field
def __str__(self):
return self.name
class Character(models.Model):
name = models.CharField(max_length=10)
movies = models.ManyToManyField(Movie, related_name='characters')
def __str__(self):
return self.name
通过指定related_name='characters'
,我们从而指定Django应该如何反向命名关系。