django之模型关系

一对一模型:关系字段定义在任意一端中

一对多模型:关系字段定义在多的一端中;一对多中,外键对应的是主表的一个对象,而不是一个单纯的idpython

多对多模型:自动生成第三张表,第三张表为关系表;先实例化对象添加两张表,而后再添加关系数据库

生成迁移文件: python manage.py makemigrationsdjango

执行迁移(生成表): python manage.py migrateurl

字段类型

  • 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:容许为空,默认值是 Falsespa

    • db_column:字段的名称,若是未指定,则使用属性的名称code

    • db_index:若值为 True, 则在表中会为此字段建立索引
    • default:默认值
    • primary_key:若为 True, 则该字段会成为模型的主键字段
    • unique:若是为 True, 这个字段在表中必须有惟一值

元选项对象

设置数据库里的表名,通常数据库迁移后的表名为:应用名_模型类名blog

  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"
相关文章
相关标签/搜索