TypeError: __init__() missing 1 required positional argument: 'on_delete'
原代码:
from django.db import models
# Create your models here.
class BookInfo(models.Model):
tilte = models.CharField(max_length=20)
pub_date = models.DateField()
class HeroInfo(models.Model):
name = models.CharField(max_length=10)
content = models.CharField(max_length=100)
gender = models.BooleanField(default=True)
book=models.ForeignKey(BookInfo)
报错原因原因:在Django2.0版本以后,定义外键的时候需要加on_delete选项,用于规定在外键的某一项删除之后,与之相关联的表项该如何处理。
on_delete已拥有五个可选择的值:
on_delete=models.CASCADE:级联删除,在外键删除之后,与之相关联的表项也随之删除。
on_delete=models.PROTECT:保护模式,在尝试删除外键的时候会进行报错,阻止你删除已经被引用的外键。
on_delete=models.SET_NULL:在外键被删除之后,会把外键设置为null。
on_delete=models.SET_DEFAULT:在外键被删除之后,会把引用外键的表项的外键属性置为,默认值。
on_delete=models.SET():自定义一个值,但只能是对应实体。
修改之后例如:
from django.db import models
# Create your models here.
class BookInfo(models.Model):
tilte = models.CharField(max_length=20)
pub_date = models.DateField()
class HeroInfo(models.Model):
name = models.CharField(max_length=10)
content = models.CharField(max_length=100)
gender = models.BooleanField(default=True)
book=models.ForeignKey(BookInfo,on_delete=models.CASCADE)
显示如下信息即数据迁移成功:
Migrations for 'booktest':
booktest\migrations\0001_initial.py
- Create model BookInfo
- Create model HeroInfo