字段和字段的参数,查询的13个方法,但标的双下划线外键和多对多操作

                字段

常用字段 

AutoField()

自增列,必须填入参数 primary_key=True则成为数据库的主键。无该字段时,django自动创建 一个model不能有两个AutoField字段。

IntegerField()

一个整数类型。数值的范围是 -2147483648 ~ 2147483647。

BooleanField()

布尔值类型

CharField()

字符类型,必须提供max_length参数。max_length表示字符的长度。

TextField()

文本类型

DateTimeField

日期时间字段,格式为YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime的实例。

DateField

日期类型,日期格式为YYYY-MM-DD,相当于Python中的datetime.date的实例。

参数:

  • auto_now:每次修改时修改为当前日期时间。
  • auto_now_add:新创建对象时自动添加当前日期时间。

auto_now和auto_now_add和default参数是互斥的,不能同时设置。

DecimalField

10进制小数 参数: max_digits 小数总长度,decimal_places,小数位长度

 

字段类型,详情可点击查询官网

AutoField(Field)
        - int自增列,必须填入参数 primary_key=True

    BigAutoField(AutoField)
        - bigint自增列,必须填入参数 primary_key=True

        注:当model中如果没有自增列,则自动会创建一个列名为id的列
        from django.db import models

        class UserInfo(models.Model):
            # 自动创建一个列名为id的且为自增的整数列
            username = models.CharField(max_length=32)

        class Group(models.Model):
            # 自定义自增列
            nid = models.AutoField(primary_key=True)
            name = models.CharField(max_length=32)

    SmallIntegerField(IntegerField):
        - 小整数 -32768 ~ 32767

    PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
        - 正小整数 0 ~ 32767

    IntegerField(Field)
        - 整数列(有符号的) -2147483648 ~ 2147483647

    PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
        - 正整数 0 ~ 2147483647

    BigIntegerField(IntegerField):
        - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807

    BooleanField(Field)
        - 布尔值类型

    NullBooleanField(Field):
        - 可以为空的布尔值

    CharField(Field)
        - 字符类型
        - 必须提供max_length参数, max_length表示字符长度

    TextField(Field)
        - 文本类型

    EmailField(CharField):
        - 字符串类型,Django Admin以及ModelForm中提供验证机制

    IPAddressField(Field)
        - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制

    GenericIPAddressField(Field)
        - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
        - 参数:
            protocol,用于指定Ipv4或Ipv6, ‘both‘,"ipv4","ipv6"
            unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"

    URLField(CharField)
        - 字符串类型,Django Admin以及ModelForm中提供验证 URL

    SlugField(CharField)
        - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)

    CommaSeparatedIntegerField(CharField)
        - 字符串类型,格式必须为逗号分割的数字

    UUIDField(Field)
        - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证

    FilePathField(Field)
        - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
        - 参数:
                path,                      文件夹路径
                match=None,                正则匹配
                recursive=False,           递归下面的文件夹
                allow_files=True,          允许文件
                allow_folders=False,       允许文件夹

    FileField(Field)
        - 字符串,路径保存在数据库,文件上传到指定目录
        - 参数:
            upload_to = ""      上传文件的保存路径
            storage = None      存储组件,默认django.core.files.storage.FileSystemStorage

    ImageField(FileField)
        - 字符串,路径保存在数据库,文件上传到指定目录
        - 参数:
            upload_to = ""      上传文件的保存路径
            storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
            width_field=None,   上传图片的高度保存的数据库字段名(字符串)
            height_field=None   上传图片的宽度保存的数据库字段名(字符串)

    DateTimeField(DateField)
        - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

    DateField(DateTimeCheckMixin, Field)
        - 日期格式      YYYY-MM-DD

    TimeField(DateTimeCheckMixin, Field)
        - 时间格式      HH:MM[:ss[.uuuuuu]]

    DurationField(Field)
        - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型

    FloatField(Field)
        - 浮点型

    DecimalField(Field)
        - 10进制小数
        - 参数:
            max_digits,小数总长度
            decimal_places,小数位长度

    BinaryField(Field)
        - 二进制类型

字段类型

字段类型

            自定义字段

自定义一个二进制字段,以及Django字段与数据库字段类型的对应关系。

class UnsignedIntegerField(models.IntegerField):
    def db_type(self, connection):
        return ‘integer UNSIGNED‘

# PS: 返回值为字段在数据库中的属性。
# Django字段与数据库字段类型对应关系如下:
    ‘AutoField‘: ‘integer AUTO_INCREMENT‘,
    ‘BigAutoField‘: ‘bigint AUTO_INCREMENT‘,
    ‘BinaryField‘: ‘longblob‘,
    ‘BooleanField‘: ‘bool‘,
    ‘CharField‘: ‘varchar(%(max_length)s)‘,
    ‘CommaSeparatedIntegerField‘: ‘varchar(%(max_length)s)‘,
    ‘DateField‘: ‘date‘,
    ‘DateTimeField‘: ‘datetime‘,
    ‘DecimalField‘: ‘numeric(%(max_digits)s, %(decimal_places)s)‘,
    ‘DurationField‘: ‘bigint‘,
    ‘FileField‘: ‘varchar(%(max_length)s)‘,
    ‘FilePathField‘: ‘varchar(%(max_length)s)‘,
    ‘FloatField‘: ‘double precision‘,
    ‘IntegerField‘: ‘integer‘,
    ‘BigIntegerField‘: ‘bigint‘,
    ‘IPAddressField‘: ‘char(15)‘,
    ‘GenericIPAddressField‘: ‘char(39)‘,
    ‘NullBooleanField‘: ‘bool‘,
    ‘OneToOneField‘: ‘integer‘,
    ‘PositiveIntegerField‘: ‘integer UNSIGNED‘,
    ‘PositiveSmallIntegerField‘: ‘smallint UNSIGNED‘,
    ‘SlugField‘: ‘varchar(%(max_length)s)‘,
    ‘SmallIntegerField‘: ‘smallint‘,
    ‘TextField‘: ‘longtext‘,
    ‘TimeField‘: ‘time‘,
    ‘UUIDField‘: ‘char(32)‘,

相信我你,不会想看的

自定义一个char类型字段:

class MyCharField(models.Field):
    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super(MyCharField, self).__init__(max_length=max_length, *args, **kwargs)

    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为max_length指定的值
        """
        return ‘char(%s)‘ % self.max_length

使用自定义char类型字段:  

class Class(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用自定义的char类型的字段
    cname = MyCharField(max_length=25)

创建的表结构:  

            字段参数

字段参数,详情可点击查看官网

    null                数据库中字段是否可以为空
    db_column           数据库中字段的列名
    default             数据库中字段的默认值
    primary_key         数据库中字段是否为主键
    db_index            数据库中字段是否可以建立索引
    unique              数据库中字段是否可以建立唯一索引
    unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引
    unique_for_month    数据库中字段【月】部分是否可以建立唯一索引
    unique_for_year     数据库中字段【年】部分是否可以建立唯一索引

    verbose_name        Admin中显示的字段名称
    blank               Admin中是否允许用户输入为空
    editable            Admin中是否可以编辑
    help_text           Admin中该字段的提示信息
    choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                        如:gf = models.IntegerField(choices=[(0, ‘何穗‘),(1, ‘大表姐‘),],default=1)

    error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
                        字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
                        如:{‘null‘: "不能为空.", ‘invalid‘: ‘格式错误‘}

    validators          自定义错误验证(列表类型),从而定制想要的验证规则
                        from django.core.validators import RegexValidator
                        from django.core.validators import EmailValidator,URLValidator,DecimalValidator,                        MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
                        如:
                            test = models.CharField(
                                max_length=32,
                                error_messages={
                                    ‘c1‘: ‘优先错信息1‘,
                                    ‘c2‘: ‘优先错信息2‘,
                                    ‘c3‘: ‘优先错信息3‘,
                                },
                                validators=[
                                    RegexValidator(regex=‘root_\d+‘, message=‘错误了‘, code=‘c1‘),
                                    RegexValidator(regex=‘root_112233\d+‘, message=‘又错误了‘, code=‘c2‘),
                                    EmailValidator(message=‘又错误了‘, code=‘c3‘), ]
                            )

            Model Meta参数

这个不是很常用,如果你有特殊需要可以使用。详情点击查看官网。 

可以显示中文

class UserInfo(models.Model):
    nid = models.AutoField(primary_key=True)
    username = models.CharField(max_length=32)

    class Meta:
        # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
        db_table = "table_name"

        # admin中显示的表名称
        verbose_name = ‘个人信息‘

        # verbose_name加s
        verbose_name_plural = ‘所有用户信息‘

        # 联合索引
        index_together = [
            ("pub_date", "deadline"),   # 应为两个存在的字段
        ]

        # 联合唯一索引
        unique_together = (("driver", "restaurant"),)   # 应为两个存在的字段

想看吗,点我呀

                ORM操作

基本操作

# 增
models.Tb1.objects.create(c1=‘xx‘, c2=‘oo‘)   # 增加一条数据,可以接受字典类型数据 **kwargs
obj = models.Tb1(c1=‘xx‘, c2=‘oo‘)
obj.save()

# 查
models.Tb1.objects.get(id=123)  # 获取单条数据,不存在则报错(不建议)
models.Tb1.objects.all()  # 获取全部
models.Tb1.objects.filter(name=‘seven‘)  # 获取指定条件的数据
models.Tb1.objects.exclude(name=‘seven‘)  # 去除指定条件的数据

# 删
# models.Tb1.objects.filter(name=‘seven‘).delete()  # 删除指定条件的数据

# 改
models.Tb1.objects.filter(name=‘seven‘).update(gender=‘0‘)   # 将指定条件的数据更新,均支持 **kwargs
obj = models.Tb1.objects.get(id=1)
obj.c1 = ‘111‘
obj.save()   # 修改单条数据    

                  查询的13种方法

from app01 import model# all()   获取所有的数据  对象列表
ret = models.Person.objects.all()

# filter()   获取所有满足条件的所有对象    对象列表
ret = models.Person.objects.filter(id=1)

# get()     获取一个对象  没有或者是多个的时候报错
ret = models.Person.objects.get(id=1)

# exclude  获取不满足条件的所有对象  对象列表
ret = models.Person.objects.exclude(id=1)

# values  获取对象的字段名和值    [ {},{} ]
# 不指定字段名  获取所有字段的名和值
# 指定字段名    获取指定字段的名和值
ret = models.Person.objects.all().values(‘name‘,‘id‘)
# for i in ret:
#     print(i,type(i))

# values_list  获取对象的值    [ (),() ]
# 不指定字段名  获取所有字段的值
# 指定字段名    获取指定字段值
ret = models.Person.objects.all().values_list(‘id‘,‘name‘)
# for i in ret:
#     print(i,type(i))

# order_by 排序 默认升序  加- 降序  指定多个进行排序
ret = models.Person.objects.all().order_by(‘age‘,‘id‘)

# reverse() 给已经排好序的结果倒叙排序
ret = models.Person.objects.all().order_by(‘age‘,‘id‘).reverse()

ret = models.Person.objects.all().reverse()

# distinct()  去重

# count   计数
ret = models.Person.objects.all().count()

# first()  last   取第一个 最后一个对象
ret = models.Person.objects.filter(id=100).first()

# exists()  判断数据是否存在
ret = models.Person.objects.filter(id=1).exists()

"""
返回结果是对象列表
all()
filter()
exclude()
order_by()
reverse()
values()
values_list()
distinct()

返回结果是对象
get()
first()
last()

返回布尔值
exists()

返回数字
count()
"""

  

原文地址:https://www.cnblogs.com/xihuanniya/p/10078328.html

时间: 12-06

字段和字段的参数,查询的13个方法,但标的双下划线外键和多对多操作的相关文章

总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show databases' -uroot -p123456 mysqlshow -uroot -p123456 # 不常用,记住上面那个就行了 3.创建数据库语法 create database 数据库名; 例如: create database `HA-test`; 4. 切换数据库 use HA-te

2-16 MySQL字段约束-索引-外键

一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) not null,pass varchar(20) not null); mysql> insert into worker values(1,'HA','123456'); mysql> insert into worker values(1,'LB',null); ERROR 1048 (2

2-13-MySQL字段约束-索引-外键

高版本导出报错问题,是由于高版本对导出文件优化了权限设置, show variables like '%secure%';查看权限是NULL就代表禁止导出 在配置文件my.cnf [mysqld]下加secure_file_priv=指定导出目录 本节所讲内容: 1.  字段修饰符 2.  清空表记录 3.  索引 4.  外键 5.     视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id

[Elasticsearch] 关于字段重复值的常用查询和操作总结

1. 取得某个索引中某个字段中的所有出现过的值 这种操作类似于使用SQL的SELECT UNIQUE语句.当需要获取某个字段上的所有可用值时,可以使用terms聚合查询完成: GET /index_streets/_search?search_type=count { "aggs": { "street_values": { "terms": { "field": "name.raw", "siz

[解决方法]Hibernate查询部分字段(含外键)出错,报空指针异常

假设当前表结构如下: food表字段有foodid,name,外键businessid,外键type business表字段有,name,外键type type表字段有id,name,foodid Hibernate生成的对应POJO分别是Food,Business,Type 需要查询food表部分字段,如name和外键businessid 则可在Food类中添加只有相应成员变量的构造方法,Food(String name,Business business) 使用hql语句 select ne

基于MVC+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

我们在使用EasyUI的时候,很多情况下需要使用到表格控件datagrid,这个控件控件非常强大,使用起来很简洁,但是我在使用中,发现对于一个表里面的外键字段进行转义,并显示引用表的一些名称的操作,却显得比较难以实现,找了很多资料,基本上没有找到对应的解决方案.本文主要介绍我对这种外键字段转义的操作的实现方式,以便供大家参考了解. 1.DataGrid的初始化操作 在了解对内容的解析前,我们先来了解EasyUI里面Datagrid的初始化操作过程,然后逐步进行分析,寻求解决方式. 一般情况下,D

SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL,动态列字段: 方法三:使用PIVOT关系运算符,静态列字段: 方法四:使用PIVOT关系运算符,动态列字段: 扩展阅读一:参数化表名.分组列.行转列字段.字段值: 扩展阅读二:在前面的基础上加入条件过滤: 参考文献(References) 二.背景(Contexts) 其实行转列并不是一个什么新鲜的

基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

我们在使用EasyUI的时候,很多情况下需要使用到表格控件datagrid,这个控件控件非常强大,使用起来很简洁,但是我在使用中,发现对于一个表里面的外键字段进行转义,并显示引用表的一些名称的操作,却显得比较难以实现,找了很多资料,基本上没有找到对应的解决方案.本文主要介绍我对这种外键字段转义的操作的实现方式,以便供大家参考了解. 1.DataGrid的初始化操作 在了解对内容的解析前,我们先来了解EasyUI里面Datagrid的初始化操作过程,然后逐步进行分析,寻求解决方式. 一般情况下,D

mybatis参数查询

单个参数查询 在mapper.xml配置文件中配置 <select id= "selectByNu" parameterType ="java.lang.String" resultMap="BaseResultMap" > select <include refid= "Base_Column_List" /> from consume_number where consume = #{consume

解决query查询输入geometry参数查询不到而通过where条件可以查到的问题

解决query查询输入geometry参数查询不到而通过where条件可以查到的问题 原因: 是因为geometry的坐标系和所要查询的图层不一样导致的(问题引起是由于底图中叠加了不同的坐标系的引起的) 问题描述: 我在公司做好的功能并且测好了,到现场出了问题,发现通过where语句查询时正常的,拉宽查询不正常.并且通过网页打开图层查询请求页面,手动输入代码中得到的geometry查询是可以查到数据的. 问题解决过程: 通过fiddler跟踪请求的http路径(因为arcgisAPI请求arcg