在《Python编程:从入门到实践》中,定义模型Entry,遇到TypeError: __init__() missing 1 required positional argument: 'on_delete'错误。

CODE: models.py

 

from django.db import models

# Create your models here.

class Topic(models.Model):
    """用户学习的主题"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        """返回模型的字符串表示"""
        return self.text

class Entry(models.Model):
    """学到的有关某个主题的具体知识"""
    topic = models.ForeignKey(Topic)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name_plural = 'entries'
        
    def __str__(self):
        return self.text[:50] + "..."

 

执行:执行 python manage.py makemigrations 【app_name时报错。

 

 

 错误提示,缺少on_delete,查询资料后发现,之前是有默认on_delete。目前的Django版本需要自己手动添加。

topic = models.ForeignKey(Topic,on_delete=models.CASCADE)

 

在Django中的一对多关系,采用Foreign创建多对一关系,Foreign(外键所在类对象的名字)创建外键。而多的这个on_delete参数,在主外关系键中,是一种级联。当产生级联操作时,比如级联删除,删除主表的数据时候从表中的数据也随着一起删除,保证数据的完整性、一致性。

 

posted on 2021-02-19 14:46  livehappy  阅读(841)  评论(0)    收藏  举报