TypeError: __init__() missing 1 required positional argument: 'on_delete'

初学Django时,修改models.py后,执行 python manage.py makemigrations learning_logs报错:

  File "D:\python_work\learning_log\learning_logs\models.py", line 14, in <modul
    class Entry(models.Model):
  File "D:\python_work\learning_log\learning_logs\models.py", line 16, in Entry
    topic = models.ForeignKey(Topic)
TypeError: __init__() missing 1 required positional argument: 'on_delete'

源代码:

 1 from django.db import models
 2 
 3 # Create your models here.
 4 
 5 class Topic(models.Model):
 6     """用户学习的主题"""
 7     text = models.CharField(max_length=200)
 8     date_added = models.DateTimeField(auto_now_add=True)
 9     
10     def __str__(self):
11         """返回模型的字符串表示"""
12         return self.text
13         
14 class Entry(models.Model):
15     """学到的有关某个主题的具体知识"""
16     topic = models.ForeignKey(Topic)
17     text = models.TextField()
18     date_added = models.DateTimeField(auto_now_add=True)
19     
20     class Meta:
21         verbose_name_plural = 'entries'
22     
23     def __str__(self):
24         """返回模型的字符串表示"""
25         return self.text[:50] + "..."

问题原因:

django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
TypeError: init() missing 1 required positional argument: ‘on_delete’

解决办法:

定义外键的时候需要加上 on_delete=;
即: 

topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
posted @ 2020-02-10 11:22  文水凡  阅读(346)  评论(0)    收藏  举报