django之模型关系
一对一模型:关系字段定义在任意一端中
一对多模型:关系字段定义在多的一端中;一对多中,外键对应的是主表的一个对象,而不是一个单纯的id
多对多模型:自动生成第三张表,第三张表为关系表;先实例化对象添加两张表,然后再添加关系
生成迁移文件: python manage.py makemigrations
执行迁移(生成表): python manage.py migrate
字段类型
- AutoField:自动增长的IntegerField,通常不指定,自动添加到模型中
- BooleanField:true/false 字段,此字段的默认表单控制是CheckboxInput
- CharField(max_length=字符长度):字符串,默认的表单样式是 TextInput
- TextField:大文本字段,一般超过4000使用,默认的表单控件是Textarea
- IntegerField:整数
- FloatField:用Python的float实例来表示的浮点数
- DateField[auto_now=False, auto_now_add=False]):使用Python的datetime.date实例表示的日期TimeField:使用Python的datetime.time实例表示的时间DateTimeField:使用Python的datetime.datetime实例表示的日期和时间
- 参数DateField.auto_now:每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
- 参数DateField.auto_now_add:当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
-
字段选项
-
null:允许为空,默认值是 False
-
db_column:字段的名称,如果未指定,则使用属性的名称
- db_index:若值为 True, 则在表中会为此字段创建索引
- default:默认值
- primary_key:若为 True, 则该字段会成为模型的主键字段
- unique:如果为 True, 这个字段在表中必须有唯一值
元选项
设置数据库里的表名,一般数据库迁移后的表名为:应用名_模型类名
class Meta():
tb_table = '表名'
模型类操作:
1.实例化模型类:ob = models.Users()
2.添加实例属性方法:①.ob.name = "张三"
data = {'name':'张三'}
②.ob = models.Users(**data)
3.实例的方法: delete:删除
save():保存
模型查询集:
- all() 获取所有 ob = models.Users.objects.all()
- filter() 筛选 ob = models.Users.objects.filter(id = 1)
- exclude() 排除
- order_by() 排序
-
values():一个对象构成一个字典,然后构成一个列表返回
返回单个值的方法
- get():返回单个满足条件的对象count():返回当前查询的总条数
- 如果未找到会引发"模型类.DoesNotExist"异常
- 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
- 第二个参数可以给定一个默认值
- first():返回第一个对象
- last():返回最后一个对象
其他查询方法:
contains 包含: ob = models.Uses.objects.filter(name__contains='jack')
in:是否包含在范围内 :ob = models.Uses.objects.filter(name__in=['jack','rose'])
gt、gte、lt、lte:大于、大于等于、小于、小于等于 ob = models.Uses.objects.filter(id__lte=5)
extra查询方法:
ob = Types.objects.extra(select = {'paths':'concat(path,id)'}).order_by('paths')
#等同于
select *,concat(path,id) as paths from types order by paths;
Q对象复杂查询(filter相当于and查询,而Q对象查询相当于or查询)
from django.db.models import Q
ob = Goods.objects.filter(Q(id__contains=v)|Q(title__contains=v))
class Users(models.Model):
username = models.CharField(max_length=10)
password = models.CharField(max_length=77)
age = models.IntegerField()
sex = models.CharField(choices=(('0','女'),('1','男')),max_length=10)
email = models.CharField(max_length=30,null=True)
phone = models.CharField(max_length=11)
pic_url = models.CharField(max_length=255,null=True)
status = models.IntegerField(default=0)
addtime = models.DateTimeField(auto_now_add=True)
class Meta():
db_table = "Users"