ORM创建表的时候,不创建主键的时候,自动创建一个主键id
浮点型:
DecimalField(max_digits=5,decimal_places=2) --> 一共五位数,两位小数
DoubleField(max_digits=5,decimal_places=2) --> 一共五位数,两位小数
创建外键:创建外键的时候,xxx不用加id,自动创建xxx_id
A与B关联,A中创建一下关系的时候
直接写表名,也可以,不用加to,要加引号
一对一:
xxx = models.OneToOneField(to="要关联的表",to_filed="要关联的字段")
一对多:
xxx = models.ForeignKey(to="要关联的表",to_filed="要关联的字段") 要关联的字段默认是要关联的表的id
多对多:表名是根据创建字段的表名和字段名拼接的,但是创建字段的表中不会增加字段
反向的多对多查询的时候,字段的拼接是表名+_set
xxx = models.ManyToManyField(to='要关联的表',to_filed="要关联的字段")
添加数据,查询数据:
一对多:
xxx是和A中对象关联的B中对象,一对多的时候只能xxx是一个对象
方式1:
赋值的时候,要先找到对应的B的models对象,然后把这个对象赋值给xxx,表中的xxx_id会自动赋值对应的models对象的id
方式2:
赋值的时候,直接给xxx_id赋值
查询:
A.xxx --> 和A中对象关联的B中对象
A.xxx.id/name... --> 和A中对象关联的B中对象的信息
多对多:
A B,C是A,B的关联表(Django创建的,用ManyToManyField),xxx是在A中创建的多对多的字段,关联的是B
xxx是A的对象关联的B的对象的集合,可能有多个对象
--> 给C中添加数据,不能直接在C中插数据
a = A().objects().get(name="ss")
b = B().objects().get(name="dd")
绑定关系:
a.xxx.add(b) 只添加,不清空 --> 创建绑定关系:C中就会添加数据
一次绑定多个对象:
b_list = B().objects().all()
a.xxx.add(*b_list)
直接传id绑定:
a.xxx.add(1,2,3) --> 放id
a.xxx.remove(b) 删除C中的指定记录
a.xxx.clear() 清空所有的关联记录
查询:
a.xxx.all() --> 得到所有的A的对象关联的B的对象
在sqlite数据库中关系表插入没有的数据不会报错
__str__()方法
class Person():
def __init__(self,name):
self.name = name
def __str__(self):
return self.name
alex = Person("alex")
print(alex)
不加__str__()方法的时候,打印的是object对象
加上之后,但一定呢就是__str__()方法的返回值