【问题标题】:Model not defined with ManyToManyField未使用 ManyToManyField 定义的模型
【发布时间】:2019-02-04 14:33:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您已经定义了 KeyConceptModel,您尝试在 PostModel 中使用它。解决此问题的两个选项是将“KeyConceptModel”作为字符串传递,或者在 PostModel 中使用之前定义 KeyConceptModel。

    【讨论】:

      【解决方案2】:

      KeyConceptModel必须先定义在顶部,类PostModel在下面:

      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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 2012-03-25
        • 2014-05-22
        • 2020-05-11
        • 1970-01-01
        相关资源
        最近更新 更多