Cannot assign A.id must be a B instance.类似的错误

在Django后台中,通过模型操作数据,对数据库进行增操作时,报出异常,如图:

意为无法分配给“3”这个uid号,“OrderList.uid”必须是一个“User”的实例,即“OrderList.uid”不能为“3”

在通过数据库sql语句上,我们习惯性insert into orderlist(uid) value("3")是可以正常增加数据的。

但是在通过Django操作数据库时,不需要写sql语句,通过模型操作数据库:

传值无法成功,其原因是因为orderlist表中的uid关联User表中的uid(主键),通过Django进行增操作时,Orderlist.uid需要一个User的实例(外键约束),将orderlist字典改成如下:

即可成功进行增操作。

类似的:

其他使用Django模型对数据库操作时,如有依赖关系,则参数的值也需要为一个对象,或查询到的外键是一个对象,例:

如果通过bid=o.bid用过滤查找 book表下bid的书名将会报错:

我们打印一下 o.bid:

结果为:

o.bid拿不到真正的id号,而是一个Book类型的对象,其原因是bid为关联Book表的外键约束,o.bid.bid才可以拿到想要的id值:

结语:以上,是我第一次随笔,在Django大而全的框架下,其中的操作方便、快捷,让开发者节约时间,但是也需要遵守它的规则,才能释放

Django和python的魅力。

posted @ 2018-11-05 21:11  stitchez  阅读(2843)  评论(0编辑  收藏  举报