Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'
2023-09-27 14:22:25 时间
from django.db import models # Create your models here. class Category(models.Model): caption = models.CharField(max_length=16) class ArticleType(models.Model): caption = models.CharField(max_length=16) class Article(models.Model): title = models.CharField(max_length=32) content = models.CharField(max_length=255) category = models.ForeignKey(Category) article_type = models.ForeignKey(ArticleType)
#chaget to
#category = models.ForeignKey(Category,on_delete=models.CASCADE)
#article_type = models.ForeignKey(ArticleType,on_delete=models.CASCADE)
# type_choice = ( # (0,'python'), # (1,'openStack'), # (2,'Linux'), # )#data save to memery,is simple # article_type_id = models.IntegerField(choices=type_choice)
原因:
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
举例说明:
user=models.OneToOneField(User)
owner=models.ForeignKey(UserProfile)
需要改成:
user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。
相关文章
- Django 博客开发教程 4 - 让 Django 完成翻译:迁移数据库
- [Django学习]模板
- C#/Sqlite-SQLite PetaPoco django 打造桌面程序
- Django-MySQL数据库使用01
- django之创建第8-2个项目-数据库数据提取之过滤操作符相关
- django之创建第7个项目-url配置
- 「基于Django的全民健康智慧中医数字服务平台」后端应用Users设计思路
- 「基于Django的全民健康智慧中医数字服务平台」前端应用User功能(九)
- Python新闻网站项目-6.Django内容后台管理系统配置
- Django 4.x Models Meta 元数据选项
- django静态文件数据库设置
- Django+Bootstrap+Mysql 搭建个人博客(三)
- SAE python django 同步数据库到线上
- Django框架数据库(mysql)存储时间DateTimeField的用法
- Django:前后端分离 djangorestframework开发API接口 serializer序列化认证组件
- Django:bootstrap table自定义查询实现
- django:multivaluedictkeyerror错误
- uwsgi启动Django项目时:unable to load app 0 (mountpoint='') (callable not found or import error) *** no app loaded. going in full dynamic mode ***
- Django学习路14_获取数据库中用户名字并展示,获取指定条数
- Django学习路2
- Django学习路6_修改数据库为 mysql ,创建mysql及进行迁徙
- Django学习路4_数据库添加元素,读取及显示到网页上
- Django使用Redis进行缓存详细最全流程