在外键字段的参数中添加db_constraint=False即可,数据库中没有外键关系,代码中依然可以按照正常外键方式使用。
例如:
class User(models.Model):
name = models.CharField(max_length=255)
room = models.ForeignKey(Room, db_constraint=False)
class Room(models.Model):
status = models.IntegerField(defaul
对于多对多表
– 1.自定义第三张表,更加灵活
– 2.ManyToManyField 自动生成第3张表 只能 有3列数据 不能自己添加。
自定义第三张表
# models.py
class Boy(models.Model):
name = models.CharField(max_length=32)
class Girl(models.Model):
name = models.CharField(max_length=32)
class Love(models.Model):
并发处理
在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。
解决办法:
悲观锁
当查询某条记录时,即让数据库为该记录加锁,锁住记录后别人无法操作,使用类似如下语法
select stock from tb_sku where id=1 for update;
SKU.objects.select_for_update().get(id=1)
悲观锁类似于我们在多线程资源竞争时添加的互斥锁,容易出现死锁现象,采用