Django NameError:未定义名称“字符”

时间:2019-10-29 07:25:26

标签: python django-models

我的模特是

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 $ “

我不知道错误来自哪里

1 个答案:

答案 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应该如何反向命名关系。