IntegrityError at ** NOT NULL constraint failed: learning_logs_topic.owner_id
最近在学习《python 从入门到实战》第19章,在learning_logs中models 添加了topic的用户属性,即哪个用户登录后创建的topic,则此topic的owner属性为此登录用户,代码:owner=models.ForeignKey(User,on_delete=models.CASCADE),owner 是User的外键(pthon 版本3.7.4,django版本2.2.6 ),并且在makemigrations后出现了如下提示:
此时选择是‘1)’的选项,然后选择的用户ID为1,即ll_admin,此时即原有topic的归属用户ID为1,即ll_admin,在执行new_topic时出现了如下错误:
IntegrityError at /new_topic/ NOT NULL constraint failed: learning_logs_topic.owner_id,错误现场如下:
其中topic 的model 源码如下:
class Topic(models.Model) :
text=models.CharField(max_length=200)
date_added=models.DateTimeField(auto_now_add=True)
owner=models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self) :
return self.text
topicform的源码如下:
class TopicForm(forms.ModelForm):
class Meta :
model=Topic
fields =['text']
labels={'text' : ''}
learning_logs 文件夹下views.py 的new_topic 源码如下:
def new_topic(request) :
if request.method != 'POST' :
form=TopicForm()
else :
form= TopicForm(request.POST)
if form.is_valid() :
form.save()
return HttpResponseRedirect(reverse('learning_logs:topics'))
context={'form':form}
return render(request,'learning_logs/new_topic.html',context)
此错误显示空值限制错误:owner,owner是models里面刚添加的属性,虽然在已存在的topic添加了owner 属性,但新添加的topic没有owner属性,所以报错。
解决的过程如下:
(1)在models.py 属性添加null=True,即允许此属性为空
修改后变为owner=models.ForeignKey(User,on_delete=models.CASCADE,null=True),修改后错误不再出现,但新添加的topic的owner为NULL,非设计所愿
(2)在models.py 里面添加默认值。
修改后owner=models.ForeignKey(User,on_delete=models.CASCADE,default=1),修改后错误也不再出现,但新添加的topic的owner均为ID为1的用户,也非设计所愿
(3)修改TopicForm,添加owner 字段
修改后TopicForm 变为如下:
class TopicForm(forms.ModelForm):
class Meta :
model=Topic
fields =['text,‘owner’']
labels={'text' : '','owner':''}
修改后将由用户选择此新建topic 的owner,如下所示:
虽然可以选择当前登录用户为此topic的owner ,但用户也可以选择其它非当前登录用户,增加了出现错误的风险
(4)在views.py new_topic视图里,用request.user 获取当前用户,并赋值给form
即在if form.is_valid() :后添加一行:
form.instance.owner=request.user,修改后变为:
def new_topic(request) :
if request.method != 'POST' :
form=TopicForm()
else :
form= TopicForm(request.POST)
if form.is_valid() :
form.instance.owner=request.user
form.save()
return HttpResponseRedirect(reverse('learning_logs:topics'))
context={'form':form}
return render(request,'learning_logs/new_topic.html',context)
即用Form的instance 参数,来获取owner 属性,并用requset.user得到的当前用户赋值给此instance的owner。修改后程序实现预定功能
(5)也是利用了instance参数,不过是在生成的Form的时候,修改后new_topic的视图如下:
def new_topic(request) :
if request.method != 'POST' :
form=TopicForm()
else :
form= TopicForm(request.POST)
topic=Topic()
topic.owner=request.user
form= TopicForm(request.POST,instance=topic)
if form.is_valid() :
form.save()
return HttpResponseRedirect(reverse('learning_logs:topics'))
context={'form':form}
return render(request,'learning_logs/new_topic.html',context)
先生成一个topic,然后赋值给owner,再将此topic赋值给instance参数,空间、时间成本较大,不过也实现了预定的功能。
IntegrityError at ** NOT NULL constraint failed: learning_logs_topic.owner_id相关推荐
- Flask报错:sqlite3.IntegrityError: NOT NULL constraint failed: step. date
Flask报错:sqlite3.IntegrityError: NOT NULL constraint failed: step. date 报错如图 解决方法 报错如图 解决方法 开始: db=co ...
- sqlite3, IntegrityError: UNIQUE constraint failed when inserting a value
sqlite报错: sqlite3.IntegrityError: UNIQUE constraint failed: IMAGESTATUE.ID 解决方案: Change INSERT to IN ...
- 数据库插入数据报错Unknown error finalizing or resetting statement (19: UNIQUE constraint failed:xxx.xxx)
PRIMARY Key: 唯一标识数据库表中的各行/记录. NOT NULL: 确保某列不能有 NULL 值 UNIQUE: 确保某列中的所有值是不同的. 当插入相同的值时会报错: Unknown e ...
- android 数据库 unique,UNIQUE constraint failed: sqlite database : android
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 问题: I am trying to insert values in table. But th ...
- sqlite3:unique constraint failed xxx Frame.No
最近在写一个项目发现第一次写入正常,第二次到执行execDML时就崩溃了. 因为是对sqliteC++版的封装,仔细一看代码也没问题 随着断点调试发现出错行在execDML 于是就进入源码看一下 最终 ...
- Host name may not be null registration failed Cannot execute request on any known server
项目场景: Eureka客户端配置由IP改成域名变量 问题描述: 关键异常栈: Cannot execute request on any known server java.lang.Illegal ...
- 解决RocketMQ org.apache.rocketmq.remoting.execption.RemotingConnectException:connect to <null> failed
本人安装RocketMQ参照文章: docker安装rocketmq 文章很详细,建议参考~ 但是可能还会有一点安装RocketMQ时遇到的问题!!! (1)org.apache.rocketmq.r ...
- Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <null>failed.
参考解决方法: 我检查了下自己的日志发现:自己云服器的安全组未对自己的公网IP开放. 将自己的公网IP添加后解决.
- rest framework错误笔记——身份验证和权限
按照官网教程(http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/)走到最后一步验证时,命令窗 ...
最新文章
- 【项目实践】车距+车辆+车道线+行人检测项目实践
- IDEA如何将git分支代码合并到master
- 如何在Win7以上环境使用VC++6
- thinkphp路由配置 php7.0,thinkphp3.2 路由设置方法
- 交叉编译openwrt php,构建 openwrt 交叉编译工具链
- 基于Kebernetes 构建.NET Core技术中台
- excel趋势线公式导出_如何用Excel进行预测分析?
- Android官方开发文档Training系列课程中文版:高效显示位图之在UI中展示位图
- oracle 存储过程 胡勇,Oracle SQL:经典查询练手第二篇
- 基于JAVA+Servlet+JSP+MYSQL的企业车库管理系统
- 二胎妈妈,35岁,年薪70万,家庭工作平衡太难,要不要辞职?
- linux系统基本特点分时,Linux操作系统四个优点.docx
- 软件安全测试方案设计模板-homin
- 如何批量将 Excel 文档转为 Json 格式
- dijistra算法
- Linux阅码场原创精华文章汇总
- 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
- x86架构学习内存管理的单元
- PAT乙级 1070 结绳
- vue3使用的移动端UI框架,vue一般用什么ui框架
热门文章
- Spark MLlib之K-Means聚类算法
- java 手机信息管理系统照相功能_Android实现手机拍照功能
- java多线程【线程常用方法】
- python程序设计搜题软件下载_智慧职教云课堂APPPython程序设计答案搜题公众号
- springboot filter_SpringBoot(二) :web综合开发
- oracle登录日志查看_last命令详解--查看Linux 登录日志+实例说明
- 2_python基础—格式化符号(输入、输出、转义、结束)
- Linux、Ubuntu、CentOS安装和配置zsh
- html语言 大全,HTML语言大全
- ios 模拟器沙盒_iOS模拟器的路径-打开沙盒路径