models设计遇到的问题

1、执行方式

2、新建apps,如goods

 

3、创建model后,执行时报错

TypeError: __init__() missing 1 required positional argument: 'on_delete'

on_delete 没有默认值,定义的时候必须显示地指定一个值。可改为

user= models.ForeignKey(User, on_delete=models.CASCADE)

说明:订单Order 与 用户 User 是多对一的关系,Order 表中有User外键 user_id,当你删除一条user数据的时候,与之关联的订单Order记录会受影响,具体根据 on_delete 的值来决定。

Django 数据模型 ForeignKey 的 on_delete 属性的可选值

  • CASCADE:级联删除,当你删除user记录时,与之关联的所有 order 都会被删除。
  • PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误,也就是说,如果有外键关联,就不允许删除,除非先把关联了外键的记录删除掉。举个例子就是想要删除user,那你要把所有关联了该user的order全部删除才可能删user。
  • SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是要设置为 blank=True, null=True。删除user后,order 记录里面的user_id 就置为null了。
  • SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
  • SET(): 自定义一个值,该值只能是对应的实体
  • DO_NOTHING:Django啥事也不做,你要删就删吧,你的外键值我依然给你保留,但是你要是去做关联查询肯定是查不到了,比如 删除 user后,order 里面的 user_id 依然在,只是再也找不到 user_id 对应的是哪个user了,因为你把他删掉了。

 

posted @ 2021-11-18 18:08  Jessie橙子  阅读(48)  评论(0编辑  收藏  举报
Live2D