Django Model笔记

常用数据类型

# https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types

BooleanField:布尔类型true/false

NullBooleanField:相当于设置了null=True的BooleanField

IntegerField:整形

CommaSeparatedIntegerField:逗号分隔的整形

CharField:max_length,必填

TextField:None

EmailField:None

GenericIPAddressField:存储IP地址

URLField:verify_exists(True),检查URL可用性

FileField:upload_to 可选

DateTimeField、DateField、TimeField:auto_now(True)可选,每次动作都会更新 / auto_now _add(True),可选,一次产生

ForeignKey:外键, 如果为空设置参数null=True, blank=True

自定义方法

# https://docs.djangoproject.com/en/1.8/topics/db/models/#overriding-predefined-model-methods

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()
 
    def save(self, *args, **kwargs):
        do_something()
        super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
        do_something_else()
 
    def get_name(self):
        return self.name
 

查询API

filter(**kwargs) 匹配条件
exclude(**kwargs) 不匹配条件
order_by(*fields) 排序
reverse() 反向排序
distinct() 去除重复记录
values(*fields) 可迭代的字典序列
values_list(*fields) 返回元组序列
all() 查询所有
raw(*args, **kwargs) 执行原生sql
defer(*fields) 延后加载字段
only(*fields) 立即载入字段
using(alias) 使用数据库,多数据库时使用
select_for_update(nowait=False) 行锁定
get(**kwargs) 单个查询
create(**kwargs) 创建对象并保存
get_or_create(defaults=None,**kwargs) 查询不到就创建 defaults={'desc': 'new'}
bulk_create(objs, batch_size=None) 批量创建
count() 对象数量
latest(field_name=None) 返回该字段最新的对象
exists() 是否包含数据
update() 更新数据
delete() 删除数据

  

Filter查询条件

__exact        精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%' __gt 大于 __gte 大于等于 __lt 小于 __lte 小于等于 __in 存在于一个list范围内 __startswith 以...开头 __istartswith 以...开头 忽略大小写 __endswith 以...结尾 __iendswith 以...结尾,忽略大小写 __range 在...范围内 __year 日期字段的年份 __month 日期字段的月份 __day 日期字段的日 __isnull=True/False

 

Q 与 F 查询

from django.db.models import F, Q
 
Q用于复杂的查询
and --> XX.objects.filter(Q(f=1),Q(f=2)) # f == 1 and f == 2
or --> XX.objects.filter(Q(f=1) | Q(f=2)) # f ==1 | f == 2
not --> XX.objects.filter(~Q(f=1),Q(f=2)) # f != 1 and f == 2

  

F 查询条件两个字段相等的值
Server.objects.filter(master_ip=F('backup_ip'))

  

 

原文地址:https://www.cnblogs.com/letong/p/4933722.html