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"


猜你喜欢

转载自www.cnblogs.com/cage0515/p/9992186.html