問題描述:
在model.py中創建多對多模型,自定義中間表through的時候,生成遷移報錯
報錯如下;
完整報錯信息
(venv) F:\django_lear\mysite1>python manage.py makemigrations
Traceback (most recent call last):
File "F:\django_learn\venv\lib\site-packages\django\db\models\fields\related.py", line 786, in __init__
to._meta.model_name
AttributeError: type object 'Group' has no attribute '_meta'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "F:\django_learn\venv\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
utility.execute()
File "F:\django_learn\venv\lib\site-packages\django\core\management\__init__.py", line 357, in execute
django.setup()
File "F:\django_learn\venv\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "F:\django_learn\venv\lib\site-packages\django\apps\registry.py", line 114, in populate
app_config.import_models()
File "F:\django_learn\venv\lib\site-packages\django\apps\config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "G:\anaconda\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "F:\django_lear\mysite1\test1\models.py", line 20, in <module>
class Membership(models.Model):
File "F:\django_lear\mysite1\test1\models.py", line 22, in Membership
group = models.ForeignKey(Group, on_delete=models.CASCADE)
File "F:\django_learn\venv\lib\site-packages\django\db\models\fields\related.py", line 792, in __init__
RECURSIVE_RELATIONSHIP_CONSTANT,
AssertionError: ForeignKey(<class 'test1.models.Group'>) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self'
完成models.py如下:
from django.db import models
# Create your models here.
class Person(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Group():
name = models.CharField(max_length=50)
members = models.ManyToManyField(Person, through="Membership")
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=200)
原因分析:
在定義Group類的時候沒有繼承models.Model
方案:
添加models.Model後,生成遷移,作用到數據庫