我的sqlite数据库中有两个类,一个名为的父表,一个名为Categorie的子表Article。我首先创建了子表类并添加了条目。所以首先我有这个:
Categorie
Article
class Article(models.Model): titre=models.CharField(max_length=100) auteur=models.CharField(max_length=42) contenu=models.TextField(null=True) date=models.DateTimeField( auto_now_add=True, auto_now=False, verbose_name="Date de parution" ) def __str__(self): return self.titre
在添加父表之后,现在models.py看起来像这样:
models.py
from django.db import models # Create your models here. class Categorie(models.Model): nom = models.CharField(max_length=30) def __str__(self): return self.nom class Article(models.Model): titre=models.CharField(max_length=100) auteur=models.CharField(max_length=42) contenu=models.TextField(null=True) date=models.DateTimeField( auto_now_add=True, auto_now=False, verbose_name="Date de parution" ) categorie = models.ForeignKey('Categorie') def __str__(self): return self.titre
因此,当我运行时python manage.py makemigrations <my_app_name>,会出现以下错误:
python manage.py makemigrations <my_app_name>
Traceback (most recent call last): File "manage.py", line 15, in <module> execute_from_command_line(sys.argv) File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\core\management\__init__.py", line 354, in execute_from_command_line utility.execute() File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\core\management\__init__.py", line 330, in execute django.setup() File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\apps\registry.py", line 112, in populate app_config.import_models() File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\apps\config.py", line 198, in import_models self.models_module = import_module(models_module_name) File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 986, in _gcd_import File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 665, in exec_module File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed File "C:\Users\lislis\Django\mon_site\blog\models.py", line 6, in <module> class Article(models.Model): File "C:\Users\lislis\Django\mon_site\blog\models.py", line 16, in Article categorie = models.ForeignKey('Categorie') TypeError: __init__() missing 1 required positional argument: 'on_delete'
你可以这样更改categorie类的属性Article:
categorie
categorie = models.ForeignKey( 'Categorie', on_delete=models.CASCADE, )
错误应该消失。
最终,你可能需要另一种选择on_delete,请查看文档以了解更多详细信息:
on_delete
https://docs.djangoproject.com/zh-CN/1.11/ref/models/fields/#django.db.models.ForeignKey
编辑:
正如你在评论中所述,你对没有任何特殊要求on_delete,你可以使用以下选项DO_NOTHING:
# ... on_delete=models.DO_NOTHING, # ...