Django 在同一模型错误中引用 ManyToManyField 而没有引号
Django referencing a ManyToManyField within the same model error without quotations
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
但是,如果我在 'Category' 中添加引号,它就会起作用。知道为什么吗? django 文档示例不在 'Publication' 和 'Article' 之间使用引号 https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/。如果有的话,我猜我是将 'Category' 作为字符串而不是作为对类别对象的引用?
genre = models.ManyToManyField('Category')
您的问题是 Category
直到 Gift
之后才定义。如果您想在不带引号的情况下使用它,则需要将 Category
放在 Gift
上方。否则,引号可以正常工作并提供相同的功能。
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
If you need to create a relationship on a model that has not yet been
defined, you can use the name of the model, rather than the model
object itself:
您需要在 Gift
之前定义 Category
或使用引号。
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
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
但是,如果我在 'Category' 中添加引号,它就会起作用。知道为什么吗? django 文档示例不在 'Publication' 和 'Article' 之间使用引号 https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/。如果有的话,我猜我是将 'Category' 作为字符串而不是作为对类别对象的引用?
genre = models.ManyToManyField('Category')
您的问题是 Category
直到 Gift
之后才定义。如果您想在不带引号的情况下使用它,则需要将 Category
放在 Gift
上方。否则,引号可以正常工作并提供相同的功能。
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
If you need to create a relationship on a model that has not yet been defined, you can use the name of the model, rather than the model object itself:
您需要在 Gift
之前定义 Category
或使用引号。
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