Django Models相关

Models的相关知识
1. AutoField:自增整数类型。根据 ID 自增长的 Int字段

2. IntegerField:整数类型

3. BigIntegerField:大整数类型。用于数值较大时,类似于IntegerField

4. SmallIntegerField:小整数类型。数值的取值范围较小,受限于数据库的限制

5. BooleanField:布尔值(true/false)类型。

6. CharField:字符串类型。

7. CommaSeparatedInterField:存放以逗号间隔的整数序列

8. DateField:日期类型。datetime.date 实例

9. DateTimeField:日期类型。datetime.datetime 实例

10. EmailField:字符串类型(正则表达式邮箱)

11. FileField:文件类型。

12. FilePathField:文件类型。某个目录中的所有文件名集合

13. FloatField:浮点数类型

14. ImageField:图片文件类型

15. IPAddressField:IP地址类型。字符串形式(比如 "192.0.2.30")表示

16. GenericIPAddressField:IP地址类型。字符串形式(比如 "192.0.2.30"或者"2a02:42fe::4")表示

17. NullBooleanField:类似于BooleanField。允许值为null

18. PositiveIntegerField:和 IntegerField 相似。字段值必须是非负数

19. PositiveSmallIntegerField:和 PositiveIntegerField 类似,但数值的取值范围较小,受限于数据库设置。

20. SlugField:短标签。主要用于基于其他字段的值来自动填充 Slug 字段

21. TextField:和 Charfield 类似。用于存储文本。

22. TimeField:时间类型。datetime.time 实例

23. URLField:URL类型。

24. UUIDField:唯一标识类型。

25. BinaryField:二进制类型

26. Decimal:十进制小数类型

27. ForeignKey:外键类型

28. ManyToManyField:多对多类型

29. OneToOneField:一对一类型

 

字段选项

1. null=True   数据库中字段是否可以为空

2. blank=True    django的 Admin 中添加数据时是否可允许空值

3. primary_key = False    主键,对AutoField设置主键后,就会代替原来的自增 id 列

4. auto_now 和 auto_now_add
  auto_now   自动创建---无论添加或修改,都是当前操作的时间
  auto_now_add  自动创建---永远是创建时的时间

5. choices
GENDER_CHOICE = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)

6. max_length

7. default  默认值

8. verbose_name  Admin中字段的显示名称

9. name|db_column  数据库中的字段名称

10. unique=True  不允许重复

11. db_index = True  数据库索引

12. editable=True  在Admin里是否可编辑

13. error_messages=None  错误提示

14. auto_created=False  自动创建

15. help_text  在Admin中提示帮助信息

16. validators=[]   自定义错误验证(列表类型)

17. upload-to 上传到哪个位置,更多与image,filepath配合使用

 

values() 和、vlue_list() 与 all()


# User为Models类

.all()是取得所有列的数据,可以加.values()取出某一列,每一个元素为一个字典:
obj
= model.User.objects.filter(name='alex').values('id','email')
# 相当于SQL语句: select id, email from user where name='alex'
queryset -> python,Django的类 [{'id':1},{'id': 2},] values_list(),获取到的元素为一个个元组,也可以加多个参数来获取多列:
obj
= model.User.objects.filter(name='alex').value_list('id','email')
相当于SQL语句: select id, email from user where name='alex'
queryset -> python,Django的类 [(1,'1@qq.com'),(2,'alex@11.com'),]

 

表基本操作

# 增
models.User.objects.create(id='xx', name='xx')  增加一条数据,可以接受字典类型数据 **kwargs
obj = models.User(id='xx', name='xx')
obj.save()
 
# 查
models.User.objects.get(id=123)         # 获取单条数据,不存在则报错(不建议)
models.User.objects.all()               # 获取全部数据
models.User.objects.filter(name='seven') # 获取指定条件的数据
 
# 删
models.User.objects.filter(name='seven').delete() # 删除指定条件的数据
 
# 改
models.User.objects.filter(name='seven').update(gender='0')  # 将指定条件的数据更新,均支持 **kwargs
obj = models.User.objects.get(id=1)
obj.name = 'Delav'

 

双划线操作

用法: # 字段名称 + __ + 关键字

__exact
精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。 __gt 大于 __gte 大于等于 __lt 小于 __lte 小于等于 __in 存在于一个list范围内 __startswith 以...开头 __istartswith 以...开头 忽略大小写 __endswith 以...结尾 __iendswith 以...结尾,忽略大小写 __range 在...范围内 __year 日期字段的年份 __month 日期字段的月份 __day 日期字段的日 __isnull=True/False
# 获取个数
models.User.objects.filter(name='seven').count()
 
# 大于,小于
models.User.objects.filter(id__gt=1)              # 获取id大于1的值
models.User.objects.filter(id__lt=10)             # 获取id小于10的值
models.User.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
 
# in
models.User.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
models.User.objects.exclude(id__in=[11, 22, 33])  # not in
 
# contains
models.User.objects.filter(name__contains="ven")  # name中包含 ven 的数据
models.User.objects.filter(name__icontains="ven") # icontains大小写不敏感
models.User.objects.exclude(name__icontains="ven")  # name中不包含 ven的数据
 
# range
models.User.objects.filter(id__range=[1, 3])   # 范围between and
 
# 其他类似
startswith,istartswith, endswith, iendswith,
 
# order by
models.User.objects.filter(name='seven').order_by('id')    # asc
models.User.objects.filter(name='seven').order_by('-id')   # desc
 
# limit 、offset
models.User.objects.all()[10:20]
 
# group by
from django.db.models import Count, Min, Max, Sum
models.User.objects.filter(c1=1).values('id').annotate(c=Count('num'))

 

 

 

  

posted @ 2018-10-22 21:37  傲娇的草履虫  阅读(190)  评论(0编辑  收藏  举报