我在为Django 2.1迁移模型时遇到问题。 我创建了这两个类模型:
class PostModel(models.Model):
post_title = models.CharField(max_length=70)
post_short_description = models.CharField(max_length=200)
post_contents = models.TextField()
post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
post_keyconcept = models.ManyToManyField(KeyConceptModel)
post_slug = models.SlugField(unique="True")
post_highlighted = models.BooleanField(default=False)
def __str__(self):
return self.post_title
class KeyConceptModel(models.Model):
concept_text = models.CharField(max_length=50)
def __str__(self):
return self.concept_text
当我尝试启动 makemigrations 时,控制台返回:
NameError: name 'KeyConceptModel' is not defined
错误指向 post_keyconcept 行。 如果我评论所有 KeyConceptModel 和行 post_keyconcept ,则迁移成功。
我不知道出什么问题了,我是Django和Python世界的新手...
答案 0 :(得分:1)
PostModel类必须位于顶部,而KeyConceptModel类必须位于下面:
class KeyConceptModel(models.Model):
concept_text = models.CharField(max_length=50)
def __str__(self):
return self.concept_text
class PostModel(models.Model):
post_title = models.CharField(max_length=70)
post_short_description = models.CharField(max_length=200)
post_contents = models.TextField()
post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
post_keyconcept = models.ManyToManyField(KeyConceptModel)
post_slug = models.SlugField(unique="True")
post_highlighted = models.BooleanField(default=False)
def __str__(self):
return self.post_title
这是一个有趣的链接: https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/
答案 1 :(得分:1)
您已定义KeyConceptModel ,然后尝试在PostModel中使用它。解决此问题的两种方法是将“ KeyConceptModel”作为字符串传递,或者在在PostModel中使用它之前定义KeyConceptModel。