代码之家  ›  专栏  ›  技术社区  ›  myaddresstoday

Django在同一模型内引用多个域,错误不带引号

  •  1
  • myaddresstoday  · 技术社区  · 7 年前

    https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/

    所以我的代码基于这个文档,我遇到了一个错误。

    from django.db import models
    
    class Gift(models.Model):
        name = models.CharField(
          max_length=120, unique=True, help_text='Enter the gift item name'
        )
        # skipping to the ManyToMany ....
        genre = models.ManyToManyField(Category)
    
    class Category(models.Model):
        # skipping stuff like CATEGORIES ...
        type = models.IntegerField(
          primary_key   = True, choices = CATEGORIES, default = EVENT,
        )
        description = models.CharField(max_length=500, null=True, blank=True)
    

    我收到此错误

    Traceback (most recent call last):
      File "manage.py", line 22, in <module>
        execute_from_command_line(sys.argv)
      File "/.../gifting_db/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
        utility.execute()
      File "/.../gifting_db/lib/python3.6/site-packages/django/core/management/__init__.py", line 337, in execute
        django.setup()
      File "/.../gifting_db/lib/python3.6/site-packages/django/__init__.py", line 27, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/.../gifting_db/lib/python3.6/site-packages/django/apps/registry.py", line 108, in populate
        app_config.import_models()
      File "/.../gifting_db/lib/python3.6/site-packages/django/apps/config.py", line 202, in import_models
        self.models_module = import_module(models_module_name)
      File "/.../gifting_db/lib/python3.6/importlib/__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 978, in _gcd_import
      File "<frozen importlib._bootstrap>", line 961, in _find_and_load
      File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 678, in exec_module
      File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
      File "/.../gifting_db/gifting/gifts/models.py", line 5, in <module>
        class Gift(models.Model):
      File "/.../gifting_db/gifting/gifts/models.py", line 20, in Gift
        category    = models.ManyToManyField(Category)
    NameError: name 'Category' is not defined
    

    https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/ 在“出版物”和“文章”之间。如果有什么不同的话,我想我是把“Category”作为字符串放进去的,而不是作为对Category对象的引用?

    genre = models.ManyToManyField('Category')
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Raj Subit    7 年前

    你需要定义 Category Gift

    from django.db import models
    
    
    class Category(models.Model):
        # skipping stuff like CATEGORIES ...
        type = models.IntegerField(
        primary_key = True, choices=CATEGORIES, default=EVENT)
        description = models.CharField(max_length=500, null=True, blank=True)
    
    
    class Gift(models.Model):
        name = models.CharField(max_length=120, unique=True, help_text='Enter the gift item name'
        )
        # skipping to the ManyToMany ....
        genre = models.ManyToManyField(Category)
    

    use quotes

    from django.db import models
    
    
    class Gift(models.Model):
        name = models.CharField(max_length=120, unique=True, help_text='Enter the gift item name'
        )
        # skipping to the ManyToMany ....
        genre = models.ManyToManyField('Category')
    
    
    class Category(models.Model):
        # skipping stuff like CATEGORIES ...
        type = models.IntegerField(primary_key=True, choices=CATEGORIES, default=EVENT,)
        description = models.CharField(max_length=500, null=True, blank=True
    
        2
  •  1
  •   Cory Madden    7 年前

    你的问题是 Category 直到之后才定义 Gift 。如果您想使用它而不使用引号,则需要放置 在上面 。否则,报价工作正常,并提供相同的功能。

    https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

    如果您需要在尚未建立的模型上创建关系 对象本身: