Django之Model组件
Model组件在就已经提到过了,本章介绍更多高级部分。
django.db <span style="color: #0000ff;">class user(models.Model): <span style="color: #008000;">#<span style="color: #008000;">数据库表名为app_classname,比如现在这个表存在数据库中为cmdb_user
name=models.CharField(max_length=24) <span style="color: #008000;">#<span style="color: #008000;">字符串,最大长度24 age=models.IntegerField() <span style="color: #008000;">#<span style="color: #008000;">整数类型 <span style="color: #008000;">#<span style="color: #008000;">#一对多 <span style="color: #0000ff;">class<span style="color: #000000;"> user(models.Model): <span style="color: #0000ff;">class<span style="color: #000000;"> usergroup(models.Model): <span style="color: #008000;">#<span style="color: #008000;">#一对一 <span style="color: #0000ff;">class<span style="color: #000000;"> user(models.Model): <span style="color: #0000ff;">class<span style="color: #000000;"> usergroup(models.Model): <span style="color: #008000;">#<span style="color: #008000;">##多对多<span style="color: #008000;"> <span style="color: #008000;">#########第一种使用传统外键方式关联(自己定义关系)######<span style="color: #0000ff;">class<span style="color: #000000;"> Host(models.Model): <span style="color: #0000ff;">class<span style="color: #000000;"> HostGroup(models.Model): <span style="color: #008000;">#<span style="color: #008000;">#########第二种使用django自带的方式创建######## <span style="color: #0000ff;">class<span style="color: #000000;"> HostGroup(models.Model): <span style="color: #008000;">#<span style="color: #008000;">########第三种自定义第三张表,使用django创建m2m关联字段 <span style="color: #0000ff;">class<span style="color: #000000;"> HostGroup(models.Model): ?2、model字段介绍- int自增列,必须填入参数 primary_key=
BigAutoField(AutoField)
</span>- bigint自增列,必须填入参数 primary_key=<span style="color: #000000;">True
注:当model中如果没有自增列,则自动会创建一个列名为id的列
</span><span style="color: #0000ff;">from</span> django.db <span style="color: #0000ff;">import</span><span style="color: #000000;"> models
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> UserInfo(models.Model):
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 自动创建一个列名为id的且为自增的整数列</span>
username = models.CharField(max_length=32<span style="color: #000000;">)
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Group(models.Model):
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 自定义自增列</span>
nid = models.AutoField(primary_key=<span style="color: #000000;">True)
name </span>= models.CharField(max_length=32<span style="color: #000000;">)
SmallIntegerField(IntegerField):
</span>- 小整数 -32768 ~ 32767<span style="color: #000000;">
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin,IntegerField)
</span>- 正小整数 0 ~ 32767<span style="color: #000000;">
IntegerField(Field)
</span>- 整数列(有符号的) -2147483648 ~ 2147483647<span style="color: #000000;">
PositiveIntegerField(PositiveIntegerRelDbTypeMixin,IntegerField)
</span>- 正整数 0 ~ 2147483647<span style="color: #000000;">
BigIntegerField(IntegerField):
</span>- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807<span style="color: #000000;">
BooleanField(Field)
</span>-<span style="color: #000000;"> 布尔值类型
NullBooleanField(Field):
</span>-<span style="color: #000000;"> 可以为空的布尔值
CharField(Field)
</span>-<span style="color: #000000;"> 字符类型
</span>-<span style="color: #000000;"> 必须提供max_length参数, max_length表示字符长度
TextField(Field)
</span>-<span style="color: #000000;"> 文本类型
EmailField(CharField):
</span>-<span style="color: #000000;"> 字符串类型,Django Admin以及ModelForm中提供验证机制
IPAddressField(Field)
</span>-<span style="color: #000000;"> 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
GenericIPAddressField(Field)
</span>-<span style="color: #000000;"> 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
</span>-<span style="color: #000000;"> 参数:
protocol,用于指定Ipv4或Ipv6, </span><span style="color: #800000;">'</span><span style="color: #800000;">both</span><span style="color: #800000;">'</span>,<span style="color: #800000;">"</span><span style="color: #800000;">ipv4</span><span style="color: #800000;">"</span>,<span style="color: #800000;">"</span><span style="color: #800000;">ipv6</span><span style="color: #800000;">"</span><span style="color: #000000;">
unpack_ipv4, 如果指定为True,则输入::ffff:</span>192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol=<span style="color: #800000;">"</span><span style="color: #800000;">both</span><span style="color: #800000;">"</span><span style="color: #000000;">
URLField(CharField)
</span>-<span style="color: #000000;"> 字符串类型,Django Admin以及ModelForm中提供验证 URL
SlugField(CharField)
</span>-<span style="color: #000000;"> 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
CommaSeparatedIntegerField(CharField)
</span>-<span style="color: #000000;"> 字符串类型,格式必须为逗号分割的数字
UUIDField(Field)
</span>-<span style="color: #000000;"> 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
FilePathField(Field)
</span>-<span style="color: #000000;"> 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
</span>-<span style="color: #000000;"> 参数:
path,文件夹路径
match</span>=<span style="color: #000000;">None,正则匹配
recursive</span>=<span style="color: #000000;">False,递归下面的文件夹
allow_files</span>=<span style="color: #000000;">True,允许文件
allow_folders</span>=<span style="color: #000000;">False,允许文件夹
FileField(Field)
</span>-<span style="color: #000000;"> 字符串,路径保存在数据库,文件上传到指定目录
</span>-<span style="color: #000000;"> 参数:
upload_to </span>= <span style="color: #800000;">""</span><span style="color: #000000;"> 上传文件的保存路径
storage </span>=<span style="color: #000000;"> None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField(FileField)
</span>-<span style="color: #000000;"> 字符串,路径保存在数据库,文件上传到指定目录
</span>-<span style="color: #000000;"> 参数:
upload_to </span>= <span style="color: #800000;">""</span><span style="color: #000000;"> 上传文件的保存路径
storage </span>=<span style="color: #000000;"> None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field</span>=<span style="color: #000000;">None,上传图片的高度保存的数据库字段名(字符串)
height_field</span>=<span style="color: #000000;">None 上传图片的宽度保存的数据库字段名(字符串)
DateTimeField(DateField)
</span>- 日期+时间格式 YYYY-MM-<span style="color: #000000;">DD HH:MM[:ss[.uuuuuu]][TZ]
DateField(DateTimeCheckMixin,Field)
</span>- 日期格式 YYYY-MM-<span style="color: #000000;">DD
TimeField(DateTimeCheckMixin,Field)
</span>-<span style="color: #000000;"> 时间格式 HH:MM[:ss[.uuuuuu]]
DurationField(Field)
</span>-<span style="color: #000000;"> 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
FloatField(Field)
</span>-<span style="color: #000000;"> 浮点型
DecimalField(Field)
</span>-<span style="color: #000000;"> 10进制小数
</span>-<span style="color: #000000;"> 参数:
max_digits,小数总长度
decimal_places,小数位长度
BinaryField(Field)
</span>- 二进制类型</pre>
PS: 返回值为字段在数据库中的属性,Django字段默认的值为:
<span style="color: #800000;">'<span style="color: #800000;">AutoField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">integer AUTO_INCREMENT<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">BigAutoField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">bigint AUTO_INCREMENT<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">BinaryField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">longblob<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">BooleanField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">bool<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">CharField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">varchar(%(max_length)s)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">CommaSeparatedIntegerField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">varchar(%(max_length)s)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">DateField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">date<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">DateTimeField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">datetime<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">DecimalField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">numeric(%(max_digits)s,%(decimal_places)s)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">DurationField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">bigint<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">FileField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">varchar(%(max_length)s)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">FilePathField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">varchar(%(max_length)s)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">FloatField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">double precision<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">IntegerField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">integer<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">BigIntegerField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">bigint<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">IPAddressField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">char(15)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">GenericIPAddressField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">char(39)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">NullBooleanField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">bool<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">OneToOneField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">integer<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">PositiveIntegerField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">integer UNSIGNED<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">PositiveSmallIntegerField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">smallint UNSIGNED<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">SlugField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">varchar(%(max_length)s)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">SmallIntegerField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">smallint<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">TextField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">longtext<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">TimeField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">time<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">UUIDField<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">char(32)<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #008000;">#<span style="color: #008000;">####注意事项#### 1<span style="color: #000000;">.触发Model中的验证和错误提示有两种方式: a. Django Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息 b. 使用ModelForm c. 调用Model对象的 clean_fields 方法,如: <span style="color: #008000;">#<span style="color: #008000;"> models.py <span style="color: #0000ff;">class<span style="color: #000000;"> UserInfo(models.Model): nid = models.AutoField(primary_key=<span style="color: #000000;">True) username = models.CharField(max_length=32<span style="color: #000000;">)
3、字段参数verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:gf </span>= models.IntegerField(choices=[(0,<span style="color: #800000;">'</span><span style="color: #800000;">何穗</span><span style="color: #800000;">'</span>),(1,<span style="color: #800000;">'</span><span style="color: #800000;">大表姐</span><span style="color: #800000;">'</span>),],default=1<span style="color: #000000;">)
error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息;
字典健:null,blank,invalid,invalid_choice,unique,</span><span style="color: #0000ff;">and</span><span style="color: #000000;"> unique_for_date
如:{</span><span style="color: #800000;">'</span><span style="color: #800000;">null</span><span style="color: #800000;">'</span>: <span style="color: #800000;">"</span><span style="color: #800000;">不能为空.</span><span style="color: #800000;">"</span>,<span style="color: #800000;">'</span><span style="color: #800000;">invalid</span><span style="color: #800000;">'</span>: <span style="color: #800000;">'</span><span style="color: #800000;">格式错误</span><span style="color: #800000;">'</span><span style="color: #000000;">}
validators 自定义错误验证(列表类型),从而定制想要的验证规则
</span><span style="color: #0000ff;">from</span> django.core.validators <span style="color: #0000ff;">import</span><span style="color: #000000;"> RegexValidator
</span><span style="color: #0000ff;">from</span> django.core.validators <span style="color: #0000ff;">import</span><span style="color: #000000;"> EmailValidator,URLValidator,DecimalValidator,
MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
如:
test </span>=<span style="color: #000000;"> models.CharField(
max_length</span>=32<span style="color: #000000;">,error_messages</span>=<span style="color: #000000;">{
</span><span style="color: #800000;">'</span><span style="color: #800000;">c1</span><span style="color: #800000;">'</span>: <span style="color: #800000;">'</span><span style="color: #800000;">优先错信息1</span><span style="color: #800000;">'</span><span style="color: #000000;">,</span><span style="color: #800000;">'</span><span style="color: #800000;">c2</span><span style="color: #800000;">'</span>: <span style="color: #800000;">'</span><span style="color: #800000;">优先错信息2</span><span style="color: #800000;">'</span><span style="color: #000000;">,</span><span style="color: #800000;">'</span><span style="color: #800000;">c3</span><span style="color: #800000;">'</span>: <span style="color: #800000;">'</span><span style="color: #800000;">优先错信息3</span><span style="color: #800000;">'</span><span style="color: #000000;">,},validators</span>=<span style="color: #000000;">[
RegexValidator(regex</span>=<span style="color: #800000;">'</span><span style="color: #800000;">root_d+</span><span style="color: #800000;">'</span>,message=<span style="color: #800000;">'</span><span style="color: #800000;">错误了</span><span style="color: #800000;">'</span>,code=<span style="color: #800000;">'</span><span style="color: #800000;">c1</span><span style="color: #800000;">'</span><span style="color: #000000;">),RegexValidator(regex</span>=<span style="color: #800000;">'</span><span style="color: #800000;">root_112233d+</span><span style="color: #800000;">'</span>,message=<span style="color: #800000;">'</span><span style="color: #800000;">又错误了</span><span style="color: #800000;">'</span>,code=<span style="color: #800000;">'</span><span style="color: #800000;">c2</span><span style="color: #800000;">'</span><span style="color: #000000;">),EmailValidator(message</span>=<span style="color: #800000;">'</span><span style="color: #800000;">又错误了</span><span style="color: #800000;">'</span>,code=<span style="color: #800000;">'</span><span style="color: #800000;">c3</span><span style="color: #800000;">'</span><span style="color: #000000;">),]
)
<span style="color: #008000;">#<span style="color: #008000;">###时间的参数auto_now <span style="color: #008000;">#<span style="color: #008000;">更新时,自动更新为当前时间,仅仅限于obj.save()方法,才会生效 <span style="color: #000000;"> auto_now_add. <span style="color: #008000;">#<span style="color: #008000;">创建时,自动生成 4、元数据自定义通过自定义元数据可以自定义一些特性 = models.AutoField(primary_key== models.CharField(max_length=32
db_table =
unique_together = ((<span style="color: #800000;">"<span style="color: #800000;">driver<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">restaurant<span style="color: #800000;">"<span style="color: #000000;">),)
<span style="color: #000000;"> verbose_name
?5、多表关系参数ForeignKey(ForeignObject)
to,
to_field=None,
on_delete=None,
------
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> func():
</span><span style="color: #0000ff;">return</span> 10
<span style="color: #0000ff;">class</span><span style="color: #000000;"> MyModel(models.Model):
user </span>=<span style="color: #000000;"> models.ForeignKey(
to</span>=<span style="color: #800000;">"</span><span style="color: #800000;">User</span><span style="color: #800000;">"</span><span style="color: #000000;">,to_field</span>=<span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span><span style="color: #000000;">
on_delete</span>=<span style="color: #000000;">models.SET(func),)
related_name</span>=None,<span style="color: #008000;">#</span><span style="color: #008000;"> 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all()</span>
related_query_name=None,<span style="color: #008000;">#</span><span style="color: #008000;"> 反向操作时,使用的连接前缀,用于替换【表名】 如: models.UserGroup.objects.filter(表名__字段名=1).values('表名__字段名')</span>
limit_choices_to=None,<span style="color: #008000;">#</span><span style="color: #008000;"> 在Admin或ModelForm中显示关联数据时,提供的条件:</span>
<span style="color: #008000;">#</span><span style="color: #008000;"> 如:</span>
- limit_choices_to={<span style="color: #800000;">'</span><span style="color: #800000;">nid__gt</span><span style="color: #800000;">'</span>: 5<span style="color: #000000;">}
</span>- limit_choices_to=<span style="color: #0000ff;">lambda</span> : {<span style="color: #800000;">'</span><span style="color: #800000;">nid__gt</span><span style="color: #800000;">'</span>: 5<span style="color: #000000;">}
</span><span style="color: #0000ff;">from</span> django.db.models <span style="color: #0000ff;">import</span><span style="color: #000000;"> Q
</span>- limit_choices_to=Q(nid__gt=10<span style="color: #000000;">)
</span>- limit_choices_to=Q(nid=8) | Q(nid__gt=10<span style="color: #000000;">)
</span>- limit_choices_to=<span style="color: #0000ff;">lambda</span> : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption=<span style="color: #800000;">'</span><span style="color: #800000;">root</span><span style="color: #800000;">'</span><span style="color: #000000;">)
db_constraint</span>=True <span style="color: #008000;">#</span><span style="color: #008000;"> 是否在数据库中创建外键约束</span>
parent_link=False <span style="color: #008000;">#</span><span style="color: #008000;"> 在Admin中是否显示关联数据</span>
<span style="color: #000000;">
<span style="color: #000000;"> models.BB.objects.filter(...)
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0"> <tr><td><span style="font-size: 16px;">二、操作</td> </tr></table> 1.连表正反向查询(反向通过表__set查询)
=models.CharField(max_length=30<span style="color: #0000ff;">class<span style="color: #000000;"> person(models.Model):
username=models.CharField(max_length=32<span style="color: #000000;">) pwd=models.CharField(max_length=32<span style="color: #000000;">) ut=models.ForeignKey(to=<span style="color: #800000;">'<span style="color: #800000;">Usertype<span style="color: #800000;">',to_field=<span style="color: #800000;">'<span style="color: #800000;">id<span style="color: #800000;">'<span style="color: #000000;">) <span style="color: #008000;">#<span style="color: #008000;">##正向查询,通过.的方式 <span style="color: #008000;">#<span style="color: #008000;">##反向查询,默认通过:类名set获取,字段通过:表获取,若设置了关联查询参数(related_name),则改变 models.Usertype.objects.values(<span style="color: #800000;">'<span style="color: #800000;">name<span style="color: #800000;">',<span style="color: #800000;">'<span style="color: #800000;">person__username<span style="color: #800000;">') ?2、增、删、改、查
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.get(id=123) # 获取单条数据,不存在则报错(不建议)<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.all() # 获取全部 <span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(name='seven') # 获取指定条件的数据 <span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.exclude(name='seven') # 获取指定条件的数据
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(name='seven').delete() # 删除指定条件的数据
3、排序、聚合
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(idgt=1) # 获取id大于1的值<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(idgte=1) # 获取id大于等于1的值 <span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(idlt=10) # 获取id小于10的值 <span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(idlte=10) # 获取id小于10的值 <span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(idlt=10,idgt=1) # 获取id大于1 且 小于10的值
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(idin=[11,22,33]) # 获取id等于11、22、33的数据
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(namecontains="ven")
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(id__range=[1,2]) # 范围bettwen and
<span style="color: #008000;">#<span style="color: #008000;"> startswith,istartswith,endswith,iendswith,
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(name='seven').order_by('id') # asc
<span style="color: #008000;">#<span style="color: #008000;"> from django.db.models import Count,Min,Max,Sum
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.all()[10:20]
<span style="color: #008000;">#<span style="color: #008000;"> Entry.objects.get(titleregex=r'^(An?|The) +')
<span style="color: #008000;">#<span style="color: #008000;"> Entry.objects.filter(pub_date__date=datetime.date(2005,1,1))
<span style="color: #008000;">#<span style="color: #008000;"> Entry.objects.filter(pub_date__year=2005)
<span style="color: #008000;">#<span style="color: #008000;"> Entry.objects.filter(pub_date__month=12)
<span style="color: #008000;">#<span style="color: #008000;"> Entry.objects.filter(pub_date__day=3)
<span style="color: #008000;">#<span style="color: #008000;"> Entry.objects.filter(pub_dateweek_day=2)
<span style="color: #008000;">#<span style="color: #008000;"> Event.objects.filter(timestamphour=23)
<span style="color: #008000;">#<span style="color: #008000;"> Event.objects.filter(timestampminute=29)
<span style="color: #008000;">#<span style="color: #008000;"> Event.objects.filter(timestampsecond=31) ?4、使用子查询和执行原生SQL
%s"},select_params=(1,))
2,'name'='wd'],or条件['id'>2 or 'name'='wd'],使用函数['fund(ctime)=1','name'='wd']
%s"},),order_by=['-nid'])#这里还可以使用mysql中的函数
<span style="color: #008000;">#<span style="color: #008000;"> from django.db.models import F<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.update(num=F('num')+1)
<span style="color: #008000;">#<span style="color: #008000;"> 方式一:<span style="color: #008000;">#<span style="color: #008000;"> Q(nidgt=10) <span style="color: #008000;">#<span style="color: #008000;"> Q(nid=8) | Q(nidgt=10) <span style="color: #008000;">#<span style="color: #008000;"> Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root')
<span style="color: #008000;">#<span style="color: #008000;"> models.Tb1.objects.filter(con)
<span style="color: #008000;">#<span style="color: #008000;"> from django.db import connection,connections ?5、QuerySet对象方法详解<span style="color: #0000ff;">def <span style="color: #000000;"> all(self)<span style="color: #008000;">#<span style="color: #008000;"> 获取所有的数据对象 <span style="color: #0000ff;">def filter(self,*args,**<span style="color: #000000;">kwargs)<span style="color: #008000;">#<span style="color: #008000;"> 条件查询 <span style="color: #008000;">#<span style="color: #008000;"> 条件可以是:参数,字典,Q <span style="color: #0000ff;">def exclude(self,**<span style="color: #000000;">kwargs) <span style="color: #0000ff;">def select_related(self,*<span style="color: #000000;">fields) <span style="color: #0000ff;">def prefetch_related(self,*<span style="color: #000000;">lookups)
<span style="color: #0000ff;">def annotate(self,**<span style="color: #000000;">kwargs)
<span style="color: #000000;"> <span style="color: #0000ff;">def distinct(self,*<span style="color: #000000;">field_names) <span style="color: #0000ff;">def order_by(self,*<span style="color: #000000;">field_names) <span style="color: #0000ff;">def extra(self,select_params=<span style="color: #000000;">None) <span style="color: #0000ff;">def<span style="color: #000000;"> reverse(self): <span style="color: #0000ff;">def defer(self,*<span style="color: #000000;">fields): <span style="color: #0000ff;">def only(self,*<span style="color: #000000;">fields): <span style="color: #0000ff;">def<span style="color: #000000;"> using(self,alias): <span style="color: #008000;">#<span style="color: #008000;">#################################################<span style="color: #008000;"> <span style="color: #008000;"> PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #<span style="color: #008000;"><span style="color: #008000;">#################################################<span style="color: #0000ff;">def raw(self,raw_query,translations=None,using=<span style="color: #000000;">None):
<span style="color: #0000ff;">def values(self,*<span style="color: #000000;">fields): <span style="color: #0000ff;">def values_list(self,*fields,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def dates(self,field_name,kind,order=<span style="color: #800000;">'<span style="color: #800000;">ASC<span style="color: #800000;">'<span style="color: #000000;">):
<span style="color: #0000ff;">def datetimes(self,order=<span style="color: #800000;">'<span style="color: #800000;">ASC<span style="color: #800000;">',tzinfo=<span style="color: #000000;">None):
<span style="color: #0000ff;">def<span style="color: #000000;"> none(self): <span style="color: #008000;">#<span style="color: #008000;">###################################<span style="color: #008000;"> <span style="color: #008000;"> METHODS THAT DO DATABASE QUERIES #<span style="color: #008000;"><span style="color: #008000;">###################################<span style="color: #0000ff;">def aggregate(self,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def<span style="color: #000000;"> count(self): <span style="color: #0000ff;">def get(self,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def create(self,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def bulk_create(self,objs,batch_size=<span style="color: #000000;">None): <span style="color: #0000ff;">def get_or_create(self,defaults=None,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def update_or_create(self,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def<span style="color: #000000;"> first(self): <span style="color: #0000ff;">def<span style="color: #000000;"> last(self): <span style="color: #0000ff;">def in_bulk(self,id_list=<span style="color: #000000;">None): <span style="color: #0000ff;">def<span style="color: #000000;"> delete(self): <span style="color: #0000ff;">def update(self,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">def<span style="color: #000000;"> exists(self): <table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0"> <tr><td><span style="font-size: 16px;">三、model的验证功能以及内置钩子</td> </tr></table> 我们知道,model可以用来对数据库进行操作,但是Django中model提供了弱小的验证功能。 1、验证功能:通过创建对象使用save方法进行操作创建,在对象中使用full_clean()进行验证,使用异常捕捉来进行处理 user_obj=models.user.objects.create(name=,age=22,user_group_id=
2、内置钩子通过创建对象时,会执行顺序执行full_clean()-->clean_fields()-->clean(),我们可以自定义clean函数进行验证,其中clean_fields方法是字段正则验证 =models.CharField(max_length=24==models.ForeignKey(,null=True,unique=True)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |