未使用ManyToManyField定义的模型

时间:2018-08-29 17:59:36

标签: django python-3.x django-models frameworks

我在为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世界的新手...

2 个答案:

答案 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。