dhango_自定義多對多替中間表through報錯_ForeignKey is invalid. First parameter to ForeignKey must be either

問題描述:

在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後,生成遷移,作用到數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章